2012-04-18 63 views
2

我查看了現有的問題,但找不到完全匹配。也許我錯過了一些明顯的東西,如果是的話 - 請指導我在適當的地方。這是我的問題:WCF服務合同從ExtJs前端接收文件上傳

我有ExtJs前端和需要上傳二進制數據到WCF後端的應用程序。在前端,我有以下代碼(我用Ext.form.field.File控制,讓用戶選擇文件)

// Create a dummy form in the controller after user selected a file 
var form = Ext.create('Ext.form.Panel', { 
    items: [ my_file_field ] 
}); 

form.getForm().submit({ 
    method: 'POST', 
    url: 'myservice.url', 
    ... 
}); 

在後端我有以下合約:

namespace MyApp 
{ 
    [ServiceContract] 
    public interface ITransferService 
    { 
     [OperationContract] 
     [WebInvoke(UriTemplate = "UploadImage", Method = "POST")] 
     void SaveImage(Stream buffer); 
    } 

} 

它的工作原理「精」,除了一個小東西:在流裏面SaveImage()我得到的不僅是從所選文件的用戶的二進制數據,而且一系列的頭和編碼場:

------WebKitFormBoundary26wAkvwGTnAMELFM 
Content-Disposition: form-data; name="ext-gen1654"; filename="photo.png" 
Content-Type: application/octet-stream 
..... binary data goes here .... 
------WebKitFormBoundary26wAkvwGTnAMELFM-- 

什麼是我米伊辛?如何更改服務的合同,以便獲得乾淨的二進制數據?

回答

1

這應該返回給您附加到當前請求訪問的文件,但文件密鑰或索引。希望這可以幫助!

Stream file = HttpContext.Current.Request.Files.Get(<file_key>).InputStream; 
+1

其他參數以相同的方式編碼呢? – sha 2012-06-06 20:52:47

+0

@sha只要這樣做:'HttpContext.Current.Request.Form.Get(「myParam」)'。或者,您可以從查詢字符串中讀取它們:'HttpContext.Current.Request.QueryString.Get(「myParam」)'。 – 2013-12-15 11:01:06