2012-04-18 57 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