将jQuery表单的文件异步问题上载到WCF服务

时间:2012-10-07 13:37:38

标签: wcf jqueryform

我需要把它包起来但不确定如何: - )

基本上,我使用jQuery表单将文件上传到WCF REST服务。

客户端看起来像:

<script type="text/javascript">
    $(function () {
        $('form').ajaxForm(
            {
                url: '/_vti_bin/VideoUploadService/VideoUploadService.svc/Upload/theFileName',
                type: 'post'
            })
    });
</script>
<form id="fileUploadForm" name="fileUploadForm" method="post" action="/_vti_bin/VideoUploadService/VideoUploadService.svc/Upload" enctype="multipart/form-data">
  <input type="text" name="filename" />
  <input type="file" id="postedFile" name="postedFile" />
  <input type="submit" id="fileUploadSubmit" value="Do Upload" />
</form>

虽然与服务器相关的代码段是

[WebInvoke(UriTemplate = "Upload/{fileName}", ResponseFormat = WebMessageFormat.Json)]
void Upload(string fileName, Stream fileStream);

public void Upload(string fileName, Stream stream)
{
   // just write stream to disk...
}

问题是我写入磁盘的内容是这样的,而不是文件的内容(在我的例子中,“0123456789”):

-----------------------------7dc7e131201ea
Content-Disposition: form-data; name="MSOWebPartPage_PostbackSource"

// bunch of same stuff here

-----------------------------7dc7e131201ea
Content-Disposition: form-data; name="filename"

fdfd
-----------------------------7dc7e131201ea
Content-Disposition: form-data; name="postedFile"; filename="C:\Inter\Garbage\dummy.txt"
Content-Type: text/plain

0123456789
-----------------------------7dc7e131201ea--

问题 - 我是否应该手动解析上面提到的内容并提取与上传文件相对应的最后一部分(不优雅)?或者有一种方法可以应用属性,内容类型,任何设置,以便在流中获取上传文件的内容?

我怀疑有,但我错过了......任何帮助?

非常感谢!

1 个答案:

答案 0 :(得分:1)

使用ASP.NET Web API查看有关表单文件上载的2篇文章:

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2

ASP.NET Web API已经有类(如MultipartFormDataStreamProvider)来解析多部分请求以及从中保存数据。为什么不使用这些类来解决您的问题

UPD如果是.NET 3.5代码和托管:

认为MultipartFormDataStreamProvider类及其程序集不适用于.NET 3.5。在这些情况下,您应该使用一些其他库/类来解析multipart或手动执行。

尝试以下项目(MIT许可证)并从该项目中归档HttpMultipartParser.cs:

https://bitbucket.org/lorenzopolidori/http-form-parser/src