我正在开发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);
}
这是我试过但不管原来的文件名是什么。我可以知道在保存时我可以将datepart附加到文件中吗?任何帮助,将不胜感激。谢谢。
答案 0 :(得分:1)
我不确定你在GetLocalFileName
内部尝试做什么,这很混乱。
首先,StartsWith
返回一个布尔值(true或false),指示字符串是否以开头,无论你放在括号中。
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#书或其他内容。