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

标签 c#

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

下面是(我想,因为我在Controller目录下找到了这个文件)上传文件 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
  });
}

最佳答案

(仅供引用,在您进行任何更改之前,我会确保您所使用的代码已被验证可以正常工作。)

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

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

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

var extension = Path.GetExtension(file.FileName);

(路径来自 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
    });
}

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

关于C# 上传前过滤文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62880548/

相关文章:

c# - 这个特定项目可以使用哪个库/框架?

java - 使用 Google 协议(protocol)生成 C# 文件失败

c# - 使用 C# 在 Little 或 Big Endian 中写入/读取二进制数据的最佳方法?

c# - Asp.net 核心 MVC 依赖注入(inject) - 构造函数中的必需属性?

C# UserControl.VerticalScroll.Value 未设置

c# - 使用 LINQ 嵌套查询获取更新的最新行

c# - 如何使用 SignalR 加入群组

c# - .NET 中的多层应用程序

c# - app.config/web.config 中的变量

c# - 如何使用参数执行 HttpPost-action?