我创建了一个项目,可以上传文件(例如Dropbox)并将其部署到Heroku,并且可以正常工作,但是现在我想从Heroku服务器中删除文件。
我从数据库中删除了具有该关系的路径,但是我尝试了很多事情从服务器中删除文件,但没有成功,最后一次是通过fs.unlink()
,似乎是最好的用法:
//working example
const file = {url: 'https://mobox-app.herokuapp.com/files/dbd3917046ec3075f2a424e07c9a39aa-1*hoSDm9oecgsKShbAroI2XQ.jpeg'}
async deleteFile(req, res){
const file = await File.findById(req.body.fileId),
fileId = req.body.fileId
await File.deleteOne( {_id: fileId}).then(
fs.unlink(file.url, (err) => {
if (err) {
console.error(err)
return
}
})
)
}
这是heroku日志给我的:
2019-06-28T16:01:43.514606+00:00 app[web.1]: { [Error: ENOENT: no such file or directory, unlink 'https://mobox-app.herokuapp.com/files/dbd3917046ec3075f2a424e07c9a39aa-1*hoSDm9oecgsKShbAroI2XQ.jpeg']
2019-06-28T16:01:43.514645+00:00 app[web.1]: errno: -2,
2019-06-28T16:01:43.514648+00:00 app[web.1]: code: 'ENOENT',
2019-06-28T16:01:43.514650+00:00 app[web.1]: syscall: 'unlink',
2019-06-28T16:01:43.514652+00:00 app[web.1]: path:
2019-06-28T16:01:43.514654+00:00 app[web.1]: 'https://mobox-app.herokuapp.com/files/dbd3917046ec3075f2a424e07c9a39aa-1*hoSDm9oecgsKShbAroI2XQ.jpeg' }
找不到路径,如果只放置'/files/fileName.ext'
或仅放置'fileName.ext'
作为file.url
,则找不到路径。如何删除这些文件?
答案 0 :(得分:2)
我创建了一个项目,可以上传文件(例如Dropbox)并将其部署到Heroku,并且可以正常工作,但是现在我想从Heroku服务器中删除文件。
您可能想仔细研究一下“正常工作”的含义。
Heroku的文件系统is ephemeral:您所做的任何更改(如存储文件)都将在下次您的dyno重新启动时丢失。 happens frequently(每天至少一次)。无论您是否喜欢,您的上传内容都会自动删除。
Heroku recommends将用户上传的内容存储在Amazon S3之类的第三方服务上。您必须迁移到类似的位置才能使存储部分正常工作,并且要删除文件时,必须使用所选服务提供的任何工具。