我的本地应用程序,一个React,Express和Mongoose应用程序,具有博客文章功能,您可以在文本字段中输入URL或远程图像Web目标,并将其保存在目录位置/app/server/public/images/
中。图片将被调整大小并显示在博客的显示页面上。
我的PostCreateWidgit.js
的代码如下:
renderAddForm() {
return (
<Style>
{this.componentStyles}
<div className="form-content">
<h3 className="form-title"><FormattedMessage id="createNewPost" /></h3>
{
this.props.addPostError ?
(<div className="error-message">{this.props.addPostError}</div>) : (<i></i>)
}
<input type="text" placeholder={this.props.intl.messages.postTitle} className="form-field" ref="title" defaultValue="" />
<div className="image-preview-block">
<label>
<input type="text" placeholder={this.props.intl.messages.image} className="form-field" ref="preview_image" />
<a href="#" className="waves-effect waves-light btn btn-small" id="select-preview-file" onClick={this.uploadPreview}>
<FormattedMessage id="select_file" />
</a>
</label>
<form style={{ display: 'none' }} ref="uploadPreviewForm" id="uploadPreviewForm" action="/upload" method="post" encType="multipart/form-data">
<input name="image" type="file" id="uploadPreview" />
</form>
</div>
<label>
{this.props.intl.messages.postContent}
{this.renderTinyMce('')}
</label>
<a className="post-submit-button waves-effect waves-light btn btn-small" href="#" onClick={(e) => { e.preventDefault(); this.addPost(); }}>
<FormattedMessage id="submit" /> <i className="material-icons right">send</i>
</a>
<a className="waves-effect waves-light btn red btn-small" href="#" onClick={(e) => { e.preventDefault(); this.toggleForm(); }}>
<FormattedMessage id="cancel" />
</a>
</div>
</Style>
);
}
但是,当我部署到Heroku并尝试创建带有URL图像的博客文章时,出现以下错误消息:
Cannot save downloaded image: ENOENT: no such file or directory, open'/app/server/public/images/user_4567c1b46e2b715a37167c6a8a90bd44/5772c8d744198e3cdabef632136ce645.jpg
是什么导致它在我的本地生产实例上运行,但在我的Heroku应用程序上失败?我检查了Heroku上的帮助和常见问题解答,但没有看到React的任何新知识。
答案 0 :(得分:0)
很有可能是由于您要保存到的目录不存在而引起的。
但是,即使您可以解决立即出现的错误,也可能不会在Heroku上看到预期的行为。这是因为its filesystem is ephemeral,因此,只要您的测功机重新启动,您所做的任何更改都会丢失。 happens frequently(每天至少一次)。
official recommendation到store uploaded files on a third-party service like Amazon S3。