上传前的 C# 过滤文件扩展名

Ano*_*ent 2 c#

以前我使用PHP。然后我得到了一个基于 C# 的项目,但我不知道该怎么做。即使我试图打印一些东西,但它总是错误构建。

下面是(我想,因为我在Controller目录下找到了这个文件)上传文件控制器,我想限制这样只能上传图像。任何人都可以帮忙吗?

public IActionResult UploadFile ([FromForm] IFormFile file, [FromForm] string fileName) {
  return Ok (new {
    id = _fileService.UploadFile (fileName, file),
      fileName = file.FileName,
      fileSize = file.Length,
      fileType = file.ContentType,
      file = file
  });
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ohn 5

(仅供参考,在您更改任何内容之前,我会确保您已验证代码可以工作。)

如果您试图限制可以上传的文件类型,您应该能够检查文件类型(内容类型)或扩展名。

ContentType 应该类似于“image/png”或“image/jpeg”。你可以在网上找到图像类型的列表,我发现这个答案有很多常见的:https : //stackoverflow.com/a/14587821/13734398

要检查扩展名,我相信您可以使用Path.GetExtension解析这样的文件名:

var extension = Path.GetExtension(file.FileName);
Run Code Online (Sandbox Code Playgroud)

(路径来自 System.IO 命名空间。使用System.IO.Path...或添加using System.IO;到 C# 文件的顶部)

然后您可以检查“.png”或“.jpeg”的扩展名。

客户端检查

哦,你的问题提到了“上传前”。从技术上讲,此时文件已经上传。如果您试图限制上传的内容,您可以在上传表单中添加一些客户端检查。请注意,它不是防弹的,您仍然需要像我上面提到的那样检查服务器端。

其他建议

就个人而言,我建议您也稍微重构一下您的代码。这就是我想让它看起来的样子:

public IActionResult UploadFile ([FromForm] IFormFile file, [FromForm] string fileName)
{
    var fileId = _fileService.UploadFile(fileName, file);
    
    return Ok (new {
        id = fileId,
        fileName = file.FileName,
        fileSize = file.Length,
        fileType = file.ContentType,
        // Removing this from the Response.
        // Probably don't need to send the file back.
        // file = file
    });
}
Run Code Online (Sandbox Code Playgroud)

我认为如果出现问题,这会给你更好的错误信息UploadFile()。它(对我来说)也更清楚事物的顺序/顺序。