上传时如何在c#中重命名文件?

尼兰詹·戈德博尔

我正在用 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章