2

既存の質問を調べましたが、完全に一致するものは見つかりませんでした。明らかな何かが欠けている可能性があります。もしそうなら、適切な場所に誘導してください。これが私の問題です:

バイナリ データを WCF バックエンドにアップロードする必要がある ExtJs フロントとアプリケーションがあります。フロントエンドには次のコードがあります (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);
    }

}

1つの小さなことを除いて「正常に」機能します。内部のストリームではSaveImage()、ユーザーが選択したファイルからバイナリデータだけでなく、一連のヘッダーとエンコードされたフィールドも取得します。

------WebKitFormBoundary26wAkvwGTnAMELFM
Content-Disposition: form-data; name="ext-gen1654"; filename="photo.png"
Content-Type: application/octet-stream
..... binary data goes here .... 
------WebKitFormBoundary26wAkvwGTnAMELFM--

私は何が欠けていますか?クリーンなバイナリ データを取得するためにサービスの契約を変更するにはどうすればよいですか?

4

2 に答える 2

3

この投稿を見つけました: http://antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html

もっと簡単な解決策を知っている人はいますか?提案された解析ロジックが複雑であるというわけではありませんが、これは一般的なタスクであり、より簡単な方法があるはずだという印象を受けました。MSFT が標準の Web ページ POST を WCF のすぐに使える状態で理解できないとは信じられません...

于 2012-04-18T13:52:07.210 に答える
1

これにより、アクセスされた現在のリクエストに添付されたファイルが返されますが、ファイルキーまたはインデックスが返されます。お役に立てれば!

Stream file = HttpContext.Current.Request.Files.Get(<file_key>).InputStream;
于 2012-06-06T20:29:16.667 に答える