Javascript Heroku nodejs路径问题。。。错误:enoint:没有这样的文件或目录

Javascript Heroku nodejs路径问题。。。错误:enoint:没有这样的文件或目录,javascript,node.js,heroku,path,relative-path,Javascript,Node.js,Heroku,Path,Relative Path,我有一个使用hapi.js的nodejs应用程序,我正在尝试从url下载一个图像。Heroku给了我错误的路径 我的代码: Request(uri).pipe(fs.createWriteStream(__dirname+'/../public/images/'+filename)).on('close', callback); 我的错误: Error: ENOENT: no such file or directory, open '/app/../public/images/143054

我有一个使用hapi.js的nodejs应用程序,我正在尝试从url下载一个图像。Heroku给了我错误的路径

我的代码:

Request(uri).pipe(fs.createWriteStream(__dirname+'/../public/images/'+filename)).on('close', callback);
我的错误:

 Error: ENOENT: no such file or directory, open '/app/../public/images/1430540759757341747_4232065786.jpg'
我的文件结构很简单:

app.js
-public
 -images
  -sampleimage.jpg
 -videos
  -samplevideo.mp4
 -audio
  -sampleaudio.wav
正如您所看到的,heroku应用程序的_dirname是/app。我尝试过使用u dirname+‘各种路径..//etc’,也尝试过不使用u dirname


我将使用ffmpeg和语音工具创建很多这样的文件。有人能解释一下我遇到了什么样的问题吗?这是可以通过使用正确的路径名解决的问题,还是我需要配置的是我的hapijs服务器配置?

您的项目中有错误的路径

在Heroku上,无法写入项目根目录下的文件夹

在您的情况下,您的代码正在
app.js
中运行,它位于项目的“根”文件夹中

因此,在Heroku的文件系统上,这意味着您的项目如下所示:

/app
/app/app.js
/app/public
/app/public/images
...
Heroku将所有代码放入名为
app
的文件夹中

现在,在上面粘贴的代码中,您显示:

Request(uri).pipe(fs.createWriteStream(__dirname+'/../public/images/'+filename)).on('close', callback);
如果此代码在您的
app.js
中运行,则意味着通过返回文件夹(例如:
),您正试图写入Heroku文件系统的不可写部分

相反,您希望写信给:

Request(uri).pipe(fs.createWriteStream(__dirname+'/public/images/'+filename)).on('close', callback);
这将正确地将您的文件写入您想要的图像文件夹

然而 在这一刻,事情会变得复杂起来

在Heroku上,确实可以将文件写入文件系统,但它们会在短时间内消失

Heroku的文件系统是短暂的,这意味着您应该将其视为不存在

Heroku这样做的原因是,他们试图强迫您编写可伸缩的软件

如果您的应用程序将文件写入Web服务器磁盘,那么它的扩展性不会很大。原因是磁盘空间有限。每个web服务器都有自己的磁盘。这可能会导致混乱/奇怪的行为,其中每个Web服务器都有一个相同文件的副本,等等。这不是一个好的做法

相反,您应该做的是使用文件存储服务(通常)将文件存储在中心位置

此服务允许您将所有文件存储在中心位置。这意味着:

  • 您可以轻松地从所有web服务器访问文件
  • 您可以拥有由公司管理的“可靠”存储
  • 您可以更好地扩展web应用程序

您好,关于使用s3的好建议。这是一个原型,所以目前还没有对存储太过担心。我现在写这篇文章是因为我正在使用FFMPEG创建一个幻灯片,其中包含我已经尝试过的图像/音频代码,它给了我同样的错误。错误:enoint:没有这样的文件或目录,打开“/app/public/images/143559596959584256195_4232065786.jpg”我愚蠢地认为我需要进入根目录下,因为heroku已经更改了文件结构。那我现在有什么问题?文件夹不存在吗?