Asynchronous 使用XmlHttpRequest进行Web API异步上载以获得进度
我正在尝试用进度条拖放文件上载 我有一个div,它正在监听被丢弃的文件,并且工作得很好。 那我就Asynchronous 使用XmlHttpRequest进行Web API异步上载以获得进度,asynchronous,upload,asp.net-web-api,xmlhttprequest,progress-bar,Asynchronous,Upload,Asp.net Web Api,Xmlhttprequest,Progress Bar,我正在尝试用进度条拖放文件上载 我有一个div,它正在监听被丢弃的文件,并且工作得很好。 那我就 //Setting up a XmlHttpRequest xhr = new XMLHttpRequest(); //Open connection xhr.open("post", "api/ImageUpload", true); // Set appropriate headers xhr.setRequestHeader("Content-Type", "multipart/form
//Setting up a XmlHttpRequest
xhr = new XMLHttpRequest();
//Open connection
xhr.open("post", "api/ImageUpload", true);
// Set appropriate headers
xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("X-File-Type", uf.type);
xhr.setRequestHeader("X-File-Name", uf.name);
xhr.setRequestHeader("X-File-Size", uf.size);
这将很好地将流作为请求主体发送到Web API(非异步)
我正在尝试将请求转换为“public async Task奥利弗看起来好像有人向你提出了同样的问题,并且得到了答案。请看一下。 这是微软的一个例子 我将上述两种解决方案结合在一起,为我工作(只需稍作调整)
公共类上载控制器:ApiController
{
公共异步任务PostFormData()
{
string root=HttpContext.Current.Server.MapPath(“~/App_Data”);
var fileName=Path.Combine(root,Request.Headers.GetValues(“X-File-Name”).First());
尝试
{
var writer=新的StreamWriter(文件名);
wait Request.Content.CopyToAsync(writer.BaseStream);
writer.Close();
返回Request.CreateResponse(HttpStatusCode.OK);
}
捕获(System.e例外)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}
}
谢谢你的回复,但遗憾的是我已经看到了2个链接。
[System.Web.Mvc.HttpPost]
public string Post()
{
Stream stream = HttpContext.Current.Request.InputStream;
String filename = HttpContext.Current.Request.Headers["X-File-Name"];
FileModel file = uploadService.UploadFile(stream, filename);
return file.Id.ToString();
}
public class UploadController : ApiController
{
public async Task<HttpResponseMessage> PostFormData()
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var fileName = Path.Combine(root, Request.Headers.GetValues("X-File-Name").First());
try
{
var writer = new StreamWriter(fileName);
await Request.Content.CopyToAsync(writer.BaseStream);
writer.Close();
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
}