我正在開發web api和angularjs中的一個應用程序。我有文件上傳部分。我能夠上傳文件,我不存儲文件在webroot(我創建文件夾稱爲上傳)。我的問題是我沒有使用任何好的命名約定來保持文件的唯一性,所以有機會覆蓋文件。我是angularjs的新手,所以我引用下面的鏈接。 http://instinctcoder.com/angularjs-upload-multiple-files-to-asp-net-web-api/
這是我的控制器級別代碼。如何在上傳時在c#中重命名文件?
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var uploadPath = HttpContext.Current.Server.MapPath("~/Uploads");
var multipartFormDataStreamProvider = new CustomUploadMultipartFormProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider);
var fileName = "";
DateTime dt = DateTime.Now;
foreach (var key in multipartFormDataStreamProvider.Contents)
{
var a = key.Headers;
fileName = a.ContentDisposition.FileName;
break;
}
foreach (var key in multipartFormDataStreamProvider.FormData.AllKeys)
{
foreach (var val in multipartFormDataStreamProvider.FormData.GetValues(key))
{
Console.WriteLine(string.Format("{0}: {1}", key, val));
}
}
在上面的代碼我試圖日期部分添加到文件名開頭如下
string filenameNew = "App1" + DateTime.Now.ToString("yyyyMMddHHmmss");
fileName = filenameNew + a.ContentDisposition.FileName;
public CustomUploadMultipartFormProvider(string path) : base(path) { }
public override string GetLocalFileName(HttpContentHeaders headers)
{
string startwith = "Nor" + DateTime.Now.ToString("yyyyMMddHHmmss");
if (headers != null && headers.ContentDisposition != null)
{
return headers
.ContentDisposition
.FileName.TrimEnd('"').TrimStart('"').StartsWith("startwith").ToString();
}
return base.GetLocalFileName(headers);
}
這個我試過,但無論是隻配備了原來的文件名。我可以得到一些想法,我可以在保存時在哪裏追加datepart到文件?任何幫助,將不勝感激。謝謝。
我假設'CustomUploadMultipartFormProvider'寫入'ContentDisposition'頭文件中給出的文件名,而'filename'變量剛剛讀取這個值。也許不是你的問題的確切答案,但你可能只需要在文件上傳後重命名它。 – caesay
是的,在這個請求發生的時候,這些文件已經被寫入了。請注意,在這段代碼中,您實際上是在執行任何文件寫入,因爲文件已經存在於'uploadPath'中。您需要簡單地執行文件系統重命名,或者使用不同的上傳技術爲您提供正在上傳的流。 – AaronLS
謝謝。我更新了我的代碼。但那不起作用。 –