如何使用服务器上的Node JS Rest API保存图像

时间:2020-07-01 17:29:46

标签: node.js angular

我正在工作nodejs and angular,并且尝试下载使用nodejs上传的图像(创建了一个上传文件夹,所有上传的图像都在服务器端上传文件夹中),我已经编写了rest api,但没有工作。

让我解释一下确切的情况,有一个供老师上传作业的表格,他/她以图像的形式上传了作业,现在学生可以看到老师上传的作业,我也想提供下载选项,所以图像可以下载到本地计算机。

我为此使用mime-types

下载api

app.get("/download/:filename", (req, res) => {
  console.log(req.body);
  var imagename = req.params.filename;
  var file = __dirname + "/uploads/" + imagename;

  var filename = path.basename(file);
  var mimetype = mime.lookup(file);

  res.setHeader('Content-disposition', 'attachment; filename=' + filename);
  res.setHeader('Content-type', mimetype);
  res.download(file)

  var filestream = fs.createReadStream(file);
  filestream.pipe(res);
})

我从角度角度传递包含服务器端图像名称的对象,文件夹名称为上载

service.ts

(现在我要传递静态名称)

private downloadImageUrl =“ http:// localhost:3000 / download / 1592945165166-java-1.png”;

  downloadImage(assignment: Assignment) {
    return this.http.get(this.downloadImageUrl, {
      observe: "body",
      responseType: 'blob'
    })
  }

component.ts

  onDownload(index: number) {
    console.log(this.assignment[index])
    this.teacherServ.downloadImage()
    .subscribe(
      res => console.log(res),
      err => console.log(err)
    )
  }

我想将图像下载到下载文件夹的本地系统中

没有错误消息,但是静止图像未下载到下载文件夹的本地存储中。

更新:

我已成功使用file-saver中的angular-7保存了图像,我将在此处共享代码,但是仍然存在一个问题,问题是 jpg 格式的图像被保存为文件格式或未知格式(基本上我无法打开它。), png 格式没有问题。因此,我想如何使用file-saver

保存图像的jpg和png格式

service.ts

private downloadImageUrl = "http://localhost:3000/download";

  downloadImage(file: any){
      return this.http.post(this.downloadImageUrl, file, {
        responseType : 'blob',
        headers : new HttpHeaders().append('content-type','application/json')
      })
  }

component.html

<td>
  <img 
  height="92px" 
  style="cursor: pointer"
  src="http://localhost:3000/{{receivedAssignment.assignment}}" 
  alt="not found"
  (click)="onDownload(i)">

component.ts

onDownload(index: number) {
    console.log(this.assignment[index].assignment)
    var filename = this.assignment[index].filename
    this.teacherServ.downloadImage(this.assignment[index])  //sending the particular assignment that I want to download.
    .subscribe(
        (data) => {
            if(data && data != undefined && data != null) {
                saveAs(data, filename)
            }
        }
    )

}

app.js // nodejs api

app.post('/download', function(req,res,next){
  console.log(req.body.assignment);
  console.log(path.join(__dirname,'uploads','/'+req.body.assignment))
  filepath = path.join(__dirname,'uploads','/'+req.body.assignment);
  res.sendFile(filepath);
});

因此,此方法适用于png图像,但不适用于jpg图像,请让我知道为什么?以及我该如何解决?

谢谢。

0 个答案:

没有答案