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:我有一个通用处理程序,它从 ajax POST 调用传递 json 数据和上传文件接收数据。喜欢:
// type: 'POST',
// url: '/myHandler.ashx',
// data: '{"key":"val"}'
处理程序:在通用处理程序上,我想获取 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 还包含文件流,那么 extcat json 数据的最佳方法是什么?
我使用 POST 方法的原因,除了是标准的,是我也在使用 流式传输上传的文件System.Web.HttpFileCollection
,但这工作正常。