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

C#上传前过滤文件扩展名,c#,C#,以前我用过PHP。然后我得到了一个基于C#的项目,我不知道该怎么办。甚至我也试着打印一些东西,但总是出错 下面是(我想,因为我在Controller目录中找到了这个文件)上传文件控制器,我想限制只上传图像。有人能帮忙吗 public IActionResult UploadFile ([FromForm] IFormFile file, [FromForm] string fileName) { return Ok (new { id = _fileService.UploadFil

以前我用过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
  });
}
(仅供参考,在您更改任何内容之前,我将确保已验证您的代码是否正常工作。)

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

内容类型应该类似于“image/png”或“image/jpeg”。你可以在网上找到图片类型列表,我找到了这个答案,其中有很多常见的答案:

要检查扩展名,我相信您可以使用以下方法解析文件名:

(路径来自System.IO命名空间。请使用
System.IO.Path…
或将
使用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()
出现问题,我认为这将为您提供更好的错误消息。(对我来说)它也更清楚事情的顺序。

你好!你在特别挣扎什么?您需要添加一个检查,如果
文件
的扩展名无效,则需要返回一个错误,而不是上载并返回
确定
响应。到目前为止你试过什么吗?就目前的形式而言,这个问题太广泛了,无法很好地回答。@YeldarKurmangaliyev我不知道该怎么办。这个项目立即交给了我(以前是别人所有的),我被要求在不知道基本C#的情况下过滤上传的文件,我已经尝试过该代码是否通过Postman运行。我仍然不知道该怎么办。这个项目立即交给了我(以前是别人所有的),我被要求在不知道基本C#的情况下过滤上传的文件。你想通过修改我包含的代码给出一个例子吗?@AnotherStudent这是一个非常详细和很好的答案,有相关链接,你应该可以用这个来做。如果你想了解c#,微软网站上有很多资源。从@user3647971开始,我会先尝试理解它,成功后我会接受你的答案。谢谢你的帮助answer@AnotherStudent这对你来说可能也是一个很好的部分:@AnotherStudent我展示了获取扩展名的代码。要将扩展与所需的扩展进行比较,只需要一组条件。C#中的条件句与PHP中的条件句相似。从那里您可能可以执行
return BadRequest()如果扩展不是您所期望的。对ContentType执行类似的操作。
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
    });
}