【发布时间】:2013-12-19 09:42:44
【问题描述】:
我有在其他线程中看到的波纹管代码,但它实际上并没有显示如何将 MultipartFileData 文件保存到磁盘。
[HttpPost]
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath(Settings.AssetImageTempStorage);
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
// HOW DO I SAVE THIS FILE TO DISK HERE ???
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
【问题讨论】:
-
你看this的问题了吗?有一行
File.Copy(fileData.LocalFileName, Path.Combine(StoragePath, fileName));,我认为它将收到的文件复制到特定位置。 -
感谢 mozgow,我让它以类似的方式工作。现在工作正常,但在 IE8 和 IE9 中我得到响应:HTTP/1.1 415 Unsupported Media Type。在 IE10 中很好但低于我得到这个愚蠢的错误,完全不知道为什么。
-
抱歉,发现问题了。我使用的是 blueimp blueimp.github.io/jQuery-File-Upload/basic.html 文件上传器。它附带了一个用于旧版浏览器的 iframe JS 文件,我没有包括在内。我现在已经包含了它,它工作正常。
-
user2520440 早已不复存在,但代码中的问题..“我如何将这个文件保存到磁盘上???”有一个简单的答案:你不需要。它已经保存在 .ReadAsMultipartAsync() 中,这是触发保存的原因。
标签: c#-4.0 multipart multifile-uploader