如何访问nestjs服务器上上传的图像

Har*_*lot 3 mongodb node.js express angular nestjs

我有一个 Nestjs 服务器,并且已经上传了图像,但是当我尝试访问这些图像时,它们是一堆无法解释为图像的东西。(我还尝试将它们转换为 blob,然后将其转换为 objectURL,然后将其设置为 img 标签的 src 但这也不起作用)。上传代码:

    @Post('upload')
    @UseInterceptors(FileInterceptor('file',{
        storage: diskStorage({
          destination: './uploads',
          filename: editFileName,
        }),
        fileFilter: imageFileFilter,
      }))
    uploadFile(@UploadedFile() file){
        console.log(file);
        file.filename = file.originalname;
        const response = {
            originalname: file.originalname,
            filename: file.filename,
        }
        return response;
    }
Run Code Online (Sandbox Code Playgroud)

上面的上传代码完美地将图像保存为我的上传文件夹中的index-53a2.jpg。现在尝试使用 get req 获取图像:

@Get()
display(@Res() res){
    res.sendFile('index-53a2.jpg',{ root: './uploads' })
}
Run Code Online (Sandbox Code Playgroud)

对此的记录响应它给出了一些不可读(可能是编码的)内容的字符串。

我用于测试的代码:

<html>
  <head>
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script>
      $(function () {

        $('#abc').on('submit', function (e) {

          e.preventDefault();

          $.ajax({
            url: 'http:/localhost:3000/student/upload',
            method:'POST',
            data: new FormData(this),
            contentType: false,
            cache:false,
            processData:false,
            success: function (data) {
              console.log(data);
              // location.reload();
            }
          });

        });

      });

      function fun(){
        $.ajax({
            url: 'http://localhost:3000/student',
            success: function(data){
                console.log('s',data);
                let blob = new Blob([data]);
                var objectURL = URL.createObjectURL(blob);
                document.getElementById('img').src = objectURL;
            },
            error: function(data){
                console.log('e',data);
            }
        })
      }
    </script>
  </head>
  <body>
    <img alt="Image" id="img">
    <form enctype= "multipart/form-data" id="abc">
      <input type="file" name="file" required accept="image/*"><br>
      <input name="submit" type="submit" value="Submit">
    </form>
    <button onclick="fun()">Button</button>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

另外这个html代码只是为了测试,我的主要目的是使用这个服务器,这样我就可以从角度获取学生图像和数据(包含姓名、电话等基本详细信息)并将其保存在mongoDB上。另外,我不知道如何将图像从 Angular 发送到 Nestjs 以及如何保存它(以及将其保存在 MongoDB 或 Nestjs 服务器上的位置以及如何保存)

任何帮助将不胜感激!!!提前致谢。

Hug*_*ohm 7

要使用 NestJs 访问文件,您需要在使用方法中定义静态资产目录名称main.ts.useStaticAssetsapp

app.useStaticAssets(join(__dirname, '..', 'public'), {
    index: false,
    prefix: '/public',
});
Run Code Online (Sandbox Code Playgroud)