我正在工作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
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图像,请让我知道为什么?以及我该如何解决?
谢谢。