从Heroku服务器删除上传的文件

时间:2019-06-28 16:23:49

标签: node.js heroku

我创建了一个项目,可以上传文件(例如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,则找不到路径。如何删除这些文件?

1 个答案:

答案 0 :(得分:2)

  

我创建了一个项目,可以上传文件(例如Dropbox)并将其部署到Heroku,并且可以正常工作,但是现在我想从Heroku服务器中删除文件。

您可能想仔细研究一下“正常工作”的含义。

Heroku的文件系统is ephemeral:您所做的任何更改(如存储文件)都将在下次您的dyno重新启动时丢失。 happens frequently(每天至少一次)。无论您是否喜欢,您的上传内容都会自动删除。

Heroku recommends将用户上传的内容存储在Amazon S3之类的第三方服务上。您必须迁移到类似的位置才能使存储部分正常工作,并且要删除文件时,必须使用所选服务提供的任何工具。