如何从包含文件类型输入的POST表单中获取json数据

时间:2013-06-26 13:32:47

标签: c# jquery

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:在通用处理程序上,我想获取post 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,那么extcat json数据的最佳方法是什么?

除了标准之外,我使用POST方法的原因是我也使用System.Web.HttpFileCollection流式传输上传的文件,但这样做很好。

1 个答案:

答案 0 :(得分:1)

将您的Ajax代码更改为:

//        type: 'POST',
//        url: '/myHandler.ashx', 
//        data: JSON.stringify({"key":"val"}),
//        dataType: "json" ,
//        contentType: "application/json"