1

これをまとめる必要がありますが、方法がわかりません:-)

基本的に、私は 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--

質問 - 上記のものを手動で解析し、アップロードされたファイルに対応する最後の部分を抽出する必要がありますか (エレガントではありません)? または、アップロードされたファイルのコンテンツだけをストリームに取得するために、属性、コンテンツタイプ、その他の設定を適用する方法はありますか?

あると思われますが、見逃しています...助けはありますか?

どうもありがとう!

4

1 に答える 1

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 用ではないと考えてください。これらの場合、他のライブラリ/クラスを使用してマルチパートを解析するか、手動で行う必要があります。

このプロジェクトの次のプロジェクト (MIT ライセンス) とファイル HttpMultipartParser.cs を試してください。

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

于 2012-10-07T13:56:18.943 に答える