我正在用 web api 和 angularjs 开发一个应用程序。我有文件上传部分。我可以上传文件,但我没有在 webroot 中存储文件(我创建了一个名为 Uploads 的文件夹)。我的问题是我没有使用任何好的命名约定来维护文件的唯一性,因此有可能覆盖文件。我是 angularjs 的新手,所以我参考了下面的链接。http://instinctcoder.com/angularjs-upload-multiple-files-to-asp-net-web-api/
这是我的控制器级代码。
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);
}
这是我尝试过的,但无论原始文件名如何。我可以知道我在哪里可以在保存时将日期部分附加到文件中吗?任何帮助,将不胜感激。谢谢你。
我不确定你想在里面做什么GetLocalFileName
,这很混乱。
首先,StartsWith
返回一个布尔值(真或假),指示字符串是否以括号中的任何内容开头。
string str = "SIMPLE";
bool t = str.StartsWith("SIM"); // true
bool f = str.StartsWith("ZIM"); // false
您将这个 bool 转换回字符串并将该字符串传递给"startsWith"
方法的事实意味着它将始终返回字符串"false"
(转换为字符串的 bool 值),除非真正的文件名以"startsWith"
.
我认为这就是你要找的:
public override string GetLocalFileName(HttpContentHeaders headers)
{
string prefix = "Nor" + DateTime.Now.ToString("yyyyMMddHHmmss");
if (headers != null && headers.ContentDisposition != null)
{
var filename = headers.ContentDisposition.FileName.Trim('"');
return prefix + filename;
}
return base.GetLocalFileName(headers);
}
我给你的建议是多学习 C# 和 .Net 的基础知识,也许读一本 C# 的书什么的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句