Javascript 如何从heroku中删除静态文件或目录?
我在我的公共目录中动态创建了一个包含图像的文件夹,看起来像这样Javascript 如何从heroku中删除静态文件或目录?,javascript,node.js,git,bash,heroku,Javascript,Node.js,Git,Bash,Heroku,我在我的公共目录中动态创建了一个包含图像的文件夹,看起来像这样public/indiv/compa/ferfw432ervr12/test.png。我想删除indiv目录。我试着做heroku run bash。并使用rm删除目录。之后我做了ls,我找不到文件,所以我觉得一切都很好,但当我转到url时,我仍然可以看到图像,所以我做了heroku运行bash,文件仍然在那里。我要他们走 我也做了这样的事情: var deleteFolderRecursive = function(path) {
public/indiv/compa/ferfw432ervr12/test.png
。我想删除indiv
目录。我试着做heroku run bash。并使用rm
删除目录。之后我做了ls
,我找不到文件,所以我觉得一切都很好,但当我转到url时,我仍然可以看到图像,所以我做了heroku运行bash
,文件仍然在那里。我要他们走
我也做了这样的事情:
var deleteFolderRecursive = function(path) {
if( fs.existsSync(path) ) {
fs.readdirSync(path).forEach(function(file,index){
var curPath = path + "/" + file;
if(fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
};
看起来它从本地删除了文件,但没有从heroku删除,即使在我推了heroku master之后 您推送到Heroku的任何文件都存在于您运行的任何dyno的文件系统中。 听起来像是有一个web dyno,它可以动态地创建一个包含各种图像文件的目录。对于Heroku来说,这可能不是一个好主意,除非您真的只需要那些动态生成的文件仅对创建它们的dyno实例可用,并且仅在该dyno实例运行期间可用。 您不太可能有一个用例真正证明这样做是合理的,但假设您这样做了。进入并执行“heroku run bash”只需创建一个新的“一次性”dyno实例,它有自己的临时文件系统,与Web dyno的临时文件系统完全分离。
因此,删除一次性dyno中的文件或目录绝对不会影响web dyno的行为。
您不太可能有一个用例真正证明这样做是正确的
我将告诉您为什么这样做。也许你可以告诉我这样做是否“合理”,或者我会给你更多的信息。我使用facebook上的feed对话框按钮查看网站。在用户输入评论并单击fb共享按钮后,fb.api
被触发,我告诉用户在这里找到一张刚刚在共享按钮上组合起来的图片。我告诉FBAPI转到刚刚创建的个人图片。我认为这会很好,因为将照片保存在公用文件夹中是标准的。我想你是说我不应该把图像放在heroku上。我想你说如果我有多个dynos,会引起问题。我应该用类似的东西来代替吗。我必须确保在调用FBAPI之前将图像加载到cloudinary。顺便说一句,我通过使用“fs path”NPMJ删除了这些文件,正如您正确提到的,如果您有多个dyno,使用临时文件系统将不起作用,并且即使使用一个dyno,对于您的用例也不可靠,因为您的一个dyno可以在任何时候无警告地循环使用,并且您存储的文件已丢失。您应该为您的图像使用一些外部备份服务。我不熟悉cloudinary.com,但这可能是一个合适的选择。查看Heroku元素以了解其他可能性。祝你好运