我正在使用 ASP.NET Web API 上传文件。我在 RC 之前完成了此操作,但由于某种原因,文件被保存为“BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af”而不是文件名。下面的文件名变量也返回这个正文部分字符串而不是文件名。我似乎无法弄清楚我哪里出错了。感谢您的帮助。
客户端代码:
function upload() {
$("#divResult").html("Uploading...");
var formData = new FormData($('form')[0]);
$.ajax({
url: 'api/files/uploadfile?folder=' + $('#ddlFolders').val(),
type: 'POST',
success: function (data) {
$("#divResult").html(data);
},
data: formData,
cache: false,
contentType: false,
processData: false
});
};
Controller :
public Task<HttpResponseMessage> UploadFile([FromUri]string folder)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType));
}
// Save file
MultipartFormDataStreamProvider provider = new MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/Files"));
Task<IEnumerable<HttpContent>> task = Request.Content.ReadAsMultipartAsync(provider);
return task.ContinueWith<HttpResponseMessage>(contents =>
{
string filename = provider.BodyPartFileNames.First().Value;
return new HttpResponseMessage()
{
Content = new StringContent(string.Format("File saved in {0}.", folder))
};
}, TaskScheduler.FromCurrentSynchronizationContext());
文件看起来像:
最佳答案
这是我们做出的一项有意识的更改——采用 Content-Disposition header 字段中提供的文件名被认为存在安全风险,因此我们现在计算一个您所看到的文件名。
如果您想自己控制服务器本地文件名,那么您可以从 MultipartFormDataStreamProvider 派生并覆盖 GetLocalFileName 以提供您想要的任何名称。请注意,这样做可能出于安全考虑。
希望对您有所帮助,
亨里克
关于asp.net-mvc - ASP.NET Web API 文件保存为 "BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10970750/