我在一个MVC项目中工作并通过modelbinding在我的控制器中接收一个文件(HttpPostedFileBase属性),我想要的是删除我刚刚收到的文件名中的所有空格,为此我使用此
var nombre_archivo = DateTime.Now.ToString("yyyyMMddHHmm.") +"_"+ (info.file.FileName.ToString()).Split(new[] { '.' }, StringSplitOptions.RemoveEmptyEntries);
但var“nombre_archivo”总是:201801240942.System.String []和我想要的是201801240942.nameOfFile,你能告诉我哪里出错了吗?
答案 0 :(得分:2)
你正在分裂一系列点。
改为使用replace
:
var nombre_archivo = string.Format("{0}_{1}",
DateTime.Now.ToString("yyyyMMddHHmm."),
info.file.FileName.replace(" ", "")
);
此外,我们建议使用string.Format
代替+
连接。它更快更清晰
答案 1 :(得分:2)
var name = $"{DateTime.Now.ToString("yyyyMMddHHmm.")}_{info.file.FileName.Replace(" ", "")}";
答案 2 :(得分:2)
您可以使用String.Replace
将空格替换为空字符串。该方法还有其他问题。它不会检查FileName
是否有效,这意味着有人可以使用手写代码路径(如../../
或E:\somepath\myinnocentprogram.exe
发出POST请求,以便将文件写入服务器&#39} ; s盘。或者更糟,../index.htm
。
更换空间并没有多大意义。它可以产生点和斜线
如果您选中Uploading a File (Or Files) With ASP.NET MVC,您会看到作者使用Path.GetFileName()
仅检索文件的名称,然后将其保存在正确的文件夹中。您的代码应如下所示::
[HttpPost]
public ActionResult Index(HttpPostedFileBase file) {
if (file.ContentLength > 0) {
var fileName = Path.GetFileName(file.FileName)
.Replace(" ","");
var finalName=String.Format("{0:yyyyMMddHHmm}._{1}",DateTime.Now,fileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), finalName);
file.SaveAs(path);
}
return RedirectToAction("Index");
}
这确保只使用文件的文件名部分,并且文件保存在相应的文件夹中,即使有人发布了无效路径
答案 3 :(得分:-2)
这就是你应该如何解决问题
library(hms)
hms(56, 34, 12)
#> 12:34:56
编辑: 您应该使用string.Replace而不是使用Linq查询。 我没想到会出现格式问题。
所以,下面给出了正确的答案,但基本上,它看起来像:
string nombre_archivo = string.Format("{0}_{1}", DateTime.Now.ToString("yyyyMMddHHmm."), info.file.FileName.Where(c => !Char.IsWhiteSpace(c))