node.js - 如何使用nodejs从couchdb下载附件
问题描述
我在后端使用带有 couchdb nano npm 包的 nodejs,在前端使用 angularjs。我想下载couchdb的附件。
服务器端:路由是/fileupload/downloadDbDoc/:doc_id/:doc_name
const path = require('path');
const fs = require('fs');
let data = await students_db.attachment.get(doc_id, doc_name);
let filePath = path.join('tempfiles',doc_name);
fs.writeFile(filePath, data, function (err) {
if (!err){
const file = fs.createReadStream(filePath);
res.setHeader('Content-Type', 'image/jpeg; image/jpg; image/png; ');
res.setHeader(
'Content-Disposition',
'attachment; filename="' + doc_name + '"'
);
file.pipe(res);
}
});
客户端
$scope.downloadDoc = function (doc_id, doc_name) {
$http.post('/fileupload/downloadDbDoc/' + doc_id + '/' + doc_name, {
responseType: 'arraybuffer'
}).then(function (response) {
console.log(response);
let headers = response.headers();
headers['Content-Disposition'] = 'attachment';
let blob = new Blob([response.data], { type: 'octet/stream' });
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = docname;
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
}, function (errorRes) {
console.log(errorRes);
});
};
当我执行此代码时,下载开始。但问题是,当我打开这个下载的文件时,它显示错误解释 JPEG 图像文件(不是 JPEG 文件:以 0xef 0xbf 开头) 并且文件没有按我想要的方式打开。
解决方案
推荐阅读
- python - 将查看器视图文件转换为 csv
- javascript - Python 列表到 Javascript 可观察数组
- encoding - 为什么我用 ffmpeg 制作的 youtube 视频在移动设备上只能显示 360P 和 1080P,但在桌面上可以正常显示?
- java - Is it possible to create a method which can be invoked directly from a primitive type variable in java?
- javascript - node.js 和 express RESTful API 因错误而崩溃:ECONNRESET|
- asp.net-core - Asp.net core2.2 webapi,SQL依赖更改事件处理程序仅触发一次,不再触发
- javascript - 将对象的所有属性导出为非默认值
- c++ - 我的 odbc api 函数没有从 ODBC 测试中调用
- android - 安全网:com.google.android.gms.common.api.ApiException:16:
- javascript - 使用 multer 上传 pdf 和证书并签署 pdf 但出现错误