1

HTML

<form id="ajaxForm" action="/uploadHandler.ashx" method="post">
    <label for="Name">File name</label><input type="text" id="Name" />
    <label for="someData">Email</label><input type="text" id="Email" />
    <label for="file">Image</label><input name="uploadFile" id="fileName" />
</form>

AJAX: json-data と upload-file を渡す ajax POST 呼び出しからデータを受け取る汎用ハンドラーがあります。お気に入り:

//        type: 'POST',
//        url: '/myHandler.ashx', 
//        data: '{"key":"val"}'

HANDLER: ジェネリック ハンドラーで、ポスト json データを取得し、アップロードされたファイルをストリーミングします。これは私が通常 POST json-data を取得する方法です:

    var jsSerializer = new JavaScriptSerializer();
    var jsonString = String.Empty;
    context.Request.InputStream.Position = 0;
    using (var inputStream = new StreamReader(context.Request.InputStream))
    {
        jsonString = inputStream.ReadToEnd();
    }
    var uploader = jsSerializer.Deserialize<Uploader>(jsonString);

    //  the Uploader class looks like this
    public class Uploader{
        public string Name { get; set; }
        public string Email { get; set; }
    }

ここでの問題は、context.Request.InputStreamアップロードされたファイルも含まれているため、jsSerializer.Deserializeメソッドが失敗することです

POST にファイル strem も含まれている場合、json データを extcat する最良の方法は何ですか?

そして、標準であることに加えて、POST メソッドを使用している理由は、アップロードされたファイルを を使用してストリーミングしているからですSystem.Web.HttpFileCollectionが、それは正常に機能しています。

4

1 に答える 1

1

Ajax コードを次のように変更します。

//        type: 'POST',
//        url: '/myHandler.ashx', 
//        data: JSON.stringify({"key":"val"}),
//        dataType: "json" ,
//        contentType: "application/json"
于 2017-05-09T10:21:52.277 に答える