【问题标题】:Upload file async issue with jQuery forms to a WCF service将 jQuery 表单的文件异步问题上传到 WCF 服务
【发布时间】:2012-10-07 13:37:38
【问题描述】:

我需要把它包起来,但不知道怎么做:-)

基本上,我使用 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>

虽然服务器相关的sn-ps是

[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--

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

我怀疑有,但我错过了...有什么帮助吗?

非常感谢!

【问题讨论】:

    标签: wcf jqueryform


    【解决方案1】:

    看看 2 篇关于使用 ASP.NET Web API 上传表单文件的文章:

    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。在这些情况下,您应该使用其他一些库/类来解析多部分或手动进行。

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

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

    【讨论】:

    • 感谢 Regfor。我正在尝试使用 WCF 解决此问题,因为场景是 SharePoint Web 部件与后端服务通信。因此不想引入另一个依赖项。
    • 您可以通过对 System.Net.Http.Formatting.dll 的程序集引用来使用 MultipartFormDataStreamProvider 类。在这种情况下,至少解析器就足够了。
    • 好的,我会尝试并返回 :-) 更新:不要认为它适用于托管服务的 .NET Framework 3.5...
    • 啊,所以,认为这些程序集不适用于 .NET 3.5。在这些情况下,您应该使用其他一些库/类来解析多部分或手动进行。尝试以下项目(MIT 许可证)bitbucket.org/lorenzopolidori/http-form-parser/src 并从此项目中归档 HttpMultipartParser.cs
    • 是的,最终使用了multipartparser.codeplex.com。已知问题是关于处理多文件上传,但我稍后会解决这个问题。不过,如果有一种方法不需要解析表单提交,那就太棒了。感谢 Regfor 的帮助!
    猜你喜欢
    • 1970-01-01
    • 2011-10-04
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    相关资源
    最近更新 更多