使用mvc4在.net服务器上保存文件时更改名称
本文关键字:保存文件 mvc4 net 服务器 使用 | 更新日期: 2023-09-27 17:57:56
我想使用android设备将图像上传到我的服务器,我在谷歌上搜索了它,并找到了一个代码这里低于
public async Task<HttpResponseMessage> PostFile()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
//string root = HttpContext.Current.Server.MapPath("~/App_Data");
string root = HttpContext.Current.Server.MapPath("~/Files");
var provider = new MultipartFormDataStreamProvider(root);
try
{
StringBuilder sb = new StringBuilder(); // Holds the response body
// Read the form data and return an async task.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the form data.
foreach (var key in provider.FormData.AllKeys)
{
// Trace.WriteLine(key.Headers.ContentDisposition.FileName);
foreach (var val in provider.FormData.GetValues(key))
{
sb.Append(string.Format("{0}: {1}'n", key, val));
}
}
// This illustrates how to get the file names for uploaded files.
foreach (var file in provider.FileData)
{
FileInfo fileInfo = new FileInfo(file.LocalFileName);
sb.Append(string.Format("Uploaded file: {0} ({1} bytes)'n", fileInfo.Name, fileInfo.Length));
}
return new HttpResponseMessage()
{
Content = new StringContent(sb.ToString())
};
}
catch(System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
这个代码工作得很好,当我从android手机发送文件时,它会将其保存在我的服务器指定的文件夹中,但现在的问题是,当我试图从另一部手机访问它时,它显示的内容不是,为什么??找不到内容是因为当这段代码将文件保存在我的服务器上时,它会更改其原始名称,并将其替换为类似的名称
BodyPart_2ce1d675-31f6-41ec-8cdd-595fea6af0e3
并从中删除它的扩展名,这样它就不可访问了,但如果我在服务器上重命名这个文件,并将扩展名添加到它的可访问范围之外,我的观点是,有没有任何方法可以使用这个代码在服务器上存储一个扩展名为+的文件,并进行一些小的修改。
提前感谢您的帮助。
您可以扩展MultipartFormDataStreamProvider
类,以便定义自己的文件命名逻辑,如下所示:
using System.Net.Http;
using System.Net.Http.Headers;
...
public class CustomMultipartFormDataStreamProvider
: MultipartFormDataStreamProvider
{
public CustomMultipartFormDataStreamProvider(string path)
: base(path)
{
}
public override string GetLocalFileName(HttpContentHeaders headers)
{
return headers.ContentDisposition.FileName.Replace("'"", string.Empty);
}
}
现在替换CustomMultipartFormDataStreamProvider
的出现,使
var provider = new MultipartFormDataStreamProvider(root);
成为
var provider = new CustomMultipartFormDataStreamProvider (root);