【发布时间】:2017-06-04 04:27:09
【问题描述】:
我正在尝试在网页上上传仅允许 pdf 扩展名的文件。但是,如果我将任何文件(即 a.jpeg)的扩展名更改为 .pdf,这将类似于 a.jpeg.pdf,然后它可以上传到网页上。所以我想在将单个文件上传到网页之前检查多个扩展名。
下面是我的代码。
if (file != null && file.ContentLength > 0)
{
int MaxContentLength = 1024 * 1024 * 4;
string[] AllowedFileExtensions = new string[] { ".pdf" };
if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.'))))
{
ModelState.AddModelError("File", "(SERVER)Please select file of type: " + string.Join(", ", AllowedFileExtensions));
return RedirectToAction("AddNewRule", "CreateRule");
}
else if (file.ContentLength > MaxContentLength)
{
ModelState.AddModelError("File", "(SERVER)Your file is too large, maximum allowed size is: " + MaxContentLength + " MB");
return RedirectToAction("AddNewRule","CreateRule");
}
var fileName = Path.GetFileName(file.FileName);
var filetype = Path.GetExtension(fileName);
var mimeType = MimeMapping.GetMimeMapping(filetype);
if (mimeType == "application/pdf")
{
var path = Path.Combine(Server.MapPath("~/Files"), fileName);
file.SaveAs(path);
rule_add.File_Name = fileName;
rule_add.File_Path = path;
rule_add.File_Page = addrule.pagenum;
}
else
{
ModelState.AddModelError("File", "(SERVER)This file doesn't has valid content ");
return RedirectToAction("AddNewRule", "CreateRule");
}
}
感谢您的帮助。
【问题讨论】:
-
也许更强大的检查会检查文件内容而不是扩展名?例如,请参阅How to detect if a file is PDF or TIFF?。
-
也许您应该通过
pdf header检查上传的文件是否为pdf,而不是依赖文件扩展名 -
如果您更改
a.jpeg的扩展名从jpeg到pdf它是a.pdf,而不是a.jpeg.pdf。 -
文件名由客户端提供。但是网络的第一条规则是你不能信任客户端。他们可以提供任何他们想要的东西并告诉你这是一个 PDF。
标签: c# asp.net-mvc