从ExtJs前端接收文件上载的WCF服务合同

时间:2012-04-18 12:45:54

标签: wcf extjs file-upload upload extjs4

我查看了现有问题,但找不到完全匹配。也许我错过了一些明显的东西,如果是这样的话 - 请指导我在适当的地方。这是我的问题:

我有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--

我错过了什么?如何更改服务合同以获得干净的二进制数据?

2 个答案:

答案 0 :(得分:3)

我发现了这篇文章:http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html

有人知道更简单的解决方案吗?并不是那个提议的解析逻辑很复杂,但我觉得这是一个常见的任务,应该有更简单的方法。我无法相信MSFT无法理解WCF开箱即用的标准网页POST ...

答案 1 :(得分:1)

这应该返回附加到当前访问请求但文件密钥或索引的文件。希望这有帮助!

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