Express.js: TypeError: path argument is required to res.sendFile
Express.js: TypeError: path argument is required to res.sendFile
我正在使用 Multer.
将我的文件上传到目录中
我想下载我上传的相同文件,因为我在模板上以 table 的形式显示它们,每个文件都有一个下载选项。 这是我的代码:
Express.js
router.get('/downloadfile', (req, res, next) => {
var options = {
root: path.join(__dirname, './uploads'), //all my files are saved in uploads folder
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
}
var fileName = req.query.id3
res.sendFile(fileName, options, function (err) {
if (!err)
{
console.log('File sent successfully');
}
else
{
console.log('Error occurred while sending file.' + err.message)
}
})
});
Angular
onDownloadFiles(i: any)
{
this.fileToDownload = i;
console.log(this.fileToDownload);
const params = new HttpParams().set('id3', this.fileToDownload);
this.http.get('http://localhost:3000/downloadfile', {params})
.pipe(map(responseData => { return responseData; }))
.subscribe(response => {
console.log(response);
})
}
这是单击下载按钮时出现的错误。
TypeError: path argument is required to res.sendFile
好吧,当您使用异步编程时,您可以使用现代的 try-catch 方法 javascript 而不是使用传统的 if-else 语句来记录错误。
其次,与其在res.sendFile
内部使用回调函数,不如检查文件是否存在,然后再发送。
这是示例代码。
module.exports.getExe = async (req, res) => {
try {
const file = getExeFilePath(req.params.filename)
if (!fs.existsSync(file.path)) {
res.status(200).json({ 'status': false, 'result': 'File not found!' })
} else {
res.setHeader('Content-disposition', 'attachment; filename=' + file.name);
//filename is the name which client will see. Don't put full path here.
res.setHeader('Content-type', file.type);
var sendFile = fs.createReadStream(file.path);
sendFile.pipe(res);
}
} catch (error) {
console.log(error)
res.status(200).json({ 'status': false, 'result': 'Failed!' });
}
}
我正在使用 Multer.
将我的文件上传到目录中我想下载我上传的相同文件,因为我在模板上以 table 的形式显示它们,每个文件都有一个下载选项。 这是我的代码:
Express.js
router.get('/downloadfile', (req, res, next) => {
var options = {
root: path.join(__dirname, './uploads'), //all my files are saved in uploads folder
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
}
var fileName = req.query.id3
res.sendFile(fileName, options, function (err) {
if (!err)
{
console.log('File sent successfully');
}
else
{
console.log('Error occurred while sending file.' + err.message)
}
})
});
Angular
onDownloadFiles(i: any)
{
this.fileToDownload = i;
console.log(this.fileToDownload);
const params = new HttpParams().set('id3', this.fileToDownload);
this.http.get('http://localhost:3000/downloadfile', {params})
.pipe(map(responseData => { return responseData; }))
.subscribe(response => {
console.log(response);
})
}
这是单击下载按钮时出现的错误。
TypeError: path argument is required to res.sendFile
好吧,当您使用异步编程时,您可以使用现代的 try-catch 方法 javascript 而不是使用传统的 if-else 语句来记录错误。
其次,与其在res.sendFile
内部使用回调函数,不如检查文件是否存在,然后再发送。
这是示例代码。
module.exports.getExe = async (req, res) => {
try {
const file = getExeFilePath(req.params.filename)
if (!fs.existsSync(file.path)) {
res.status(200).json({ 'status': false, 'result': 'File not found!' })
} else {
res.setHeader('Content-disposition', 'attachment; filename=' + file.name);
//filename is the name which client will see. Don't put full path here.
res.setHeader('Content-type', file.type);
var sendFile = fs.createReadStream(file.path);
sendFile.pipe(res);
}
} catch (error) {
console.log(error)
res.status(200).json({ 'status': false, 'result': 'Failed!' });
}
}