【问题标题】:Accessing user uploaded images in a deployed MERN app在部署的 MERN 应用程序中访问用户上传的图像
【发布时间】:2020-03-25 16:28:11
【问题描述】:

我是一个相对较新的开发人员,我制作了一个个人博客应用程序,用户可以在其中创建帖子并上传图片以用作该帖子的缩略图。

到目前为止,后端和前端工作出色,我能够获取图像,将其本地存储在我机器上的文件夹中,将文件路径存储在 MongoDB 中,然后访问它并相应地在 UI 中显示。

现在我希望最终部署我的应用程序,我必须想办法将图像上传到在线云存储或其他东西,我也可以从我的前端访问它们。

对这种良好的服务有什么建议,如果可能的话,免费的,适合我的小项目吗?或者对处理这种情况的替代方法有什么建议?

任何建议将不胜感激!

提前致谢!

注意:我计划使用 Heroku 部署我的应用程序,所以如果您曾经直接使用 Heroku 处理过这个问题,请分享您的经验。

【问题讨论】:

    标签: node.js reactjs express file-upload cloud


    【解决方案1】:

    是的,我有几个应用程序可以做到这一点!注册一个免费的MongoDB Atlas 帐户,然后您可以将数据存储在他们的服务器上,并将您的 Express 应用程序指向连接 URL。基本上,他们会给你一个这样的 URL:

    mongodb+srv://your-cluster-name:a232dfjoi39034r@atlas-free-cluster-czaoo.mongodb.net/blog-app?retryWrites=true

    然后您可以将其存储在 .env 文件中,如下所示:

    MONGODB_URL=mongodb+srv://your-cluster-name:a232dfjoi39034r@atlas-free-cluster-czaoo.mongodb.net/blog-app?retryWrites=true
    

    然后像这样从您的应用访问:

    mongoose.connect(process.env.MONGODB_URL, connectionOptions)
      .catch((err) => {
        console.log('Error on initial DB connection: ', err);
      });
    

    您需要在开发端使用 npm 包(例如 dotenv)在您的应用中加载 .env 文件。对于heroku,您可以使用heroku-cli 并为您的应用设置任何环境变量,如下所示:

    heroku config:set MONGODB_URL=mongodb+srv://your-cluster-name:a232dfjoi39034r@atlas-free-cluster-czaoo.mongodb.net/blog-app?retryWrites=true
    

    注意,开发 MongoDB URL 可以是本地实例的连接字符串,例如:

    MONGODB_URL=mongodb://localhost:27017/my-blog-app

    heroku 可以是 MongoDB Atlas 集群。

    对于 Node 应用,还有一些其他配置需要做,比如在 package.json 中有一个“启动”脚本,对于使用 express-generator 创建的 Express 应用来说,该脚本如下所示:

      "scripts": {
        "start": "node ./bin/www"
    

    但对于您的情况可能会有所不同。它应该指向作为服务器入口点的任何文件。

    您还需要从 process.env.PORT 设置 PORT,heroku 将在他们的一端设置,而在您的一端,您可以默认为 3000:

    const PORT = process.env.PORT || 3000;
    app.listen(PORT);
    

    如果您有任何问题,请随时 PM 我或在这里提问,我可以进一步详细说明。前几次可能会令人生畏,但是一旦掌握了窍门,通过这种方式将东西部署到heroku实际上真的很容易!您还可以查看 heroku docs 以部署 Node 应用程序。

    【讨论】:

    • 我非常感谢您的全面解释,但我真的想知道如何存储部署后上传到我的应用程序的文件。我应该以某种方式将它们保存在我的机器上(也许公开一个文件夹)还是在网上有一个非常容易和免费使用的云,我可以使用它。再次感谢队友! :)
    • @milenskiqt 我向您展示了一种解决该问题的方法。使用 MongoDB 的免费 Atlas 服务将上传的内容存储在他们的云服务器中。您的服务器根本不会存储任何数据,它只有与 MongoDB Atlas 服务器对话的 Express 代码。
    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 2021-09-14
    • 1970-01-01
    • 2020-06-05
    • 2021-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多