![](/img/trans.png)
[英]ASP.NET MVC4 - ADO.NET - Saving a large number of files from ZipArchives to sql server
[英]Change The name While saving the File on .net server using mvc4
我想使用google設備將其上傳到我使用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
並從中刪除其擴展名,以便為什么無法訪問它,但是如果我在服務器上重命名此文件並向其添加擴展名(而不是其可訪問性),則代替它,這里的意思是,有什么方法可以在其上存儲文件名稱為plus(+)擴展名的服務器使用此代碼進行了一些小的修改。
在此先感謝您的幫助。
您可以擴展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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.