【发布时间】:2020-07-20 16:46:32
【问题描述】:
以下是一个基本的文件上传实用程序。它可以令人满意地处理 React / Axios API POST。文件上传到服务器根目录下的~uploads 文件夹。如何为其添加 API DELETE 处理能力?设想一个用例,其中用户将附件上传到博客文章,然后从博客文章中删除附件。在查找示例时遇到问题。
var cors = require('cors');
var express = require('express');
var multer = require('multer')
var app = express();
app.use(cors());
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
var storage = multer.diskStorage(
{
destination: function (req, file, cb)
{
cb(null, 'fileuploads');
},
filename: function (req, file, cb)
{
cb(null, file.originalname );
}
})
var upload = multer({ storage: storage }).array('file')
app.post('/upload',function(req, res)
{
upload(req, res, function (err)
{
if (err instanceof multer.MulterError)
{
return res.status(500).json(err)
}
else if (err)
{
return res.status(500).json(err)
}
return res.status(200).send(req.file)
})
});
app.listen(8001, function() {
console.log('App running on port 8001');
});
编辑:
将app.delete(...)修改为以下,成功删除文件但大约一分钟后在控制台中抛出此错误:[Error: ENOENT: no such file or directory, unlink '<PATH VALUE>']
app.delete('/writer/:file_to_delete', async (req, res) =>
{
const path = 'assets/uploads/' + req.params.targetFile;
console.log(path);
try
{
fs.unlink(path)
// NOTE: `fs.unlinkSync(path)` does the same thing
console.log('File deleted!');
return res.status(200);
}
catch(err)
{
console.error(err)
return res.status(500).json(err)
}
});
【问题讨论】:
-
使用
fs模块从文件系统中删除文件并从http客户端监听app.delete方法。 -
@marc,
fs.unlinkSync(path)成功,但随后抛出了[Error: ENOENT: no such file or directory, unlink '<PATH>。它做了某种类型的双重检查。关于如何避免的任何线索? -
您试图删除的文件不存在。发布您的代码!
-
谢谢。上面的编辑中发布的代码。请注意,最初并不是该文件不存在。磁盘上有一个文件通过
fs.unsync(...)成功删除。但是一分钟后它会抛出该错误,因此它会再次尝试查找文件。 -
问题是
return res.status(200)的末尾没有send()。这有效:return res.status(200).send({data: req.params.file_name + ' deleted'});.
标签: node.js rest express multer delete-file