如何在expressjs和mongodb网站中存储图片是最佳方式?

14 浏览
0 Comments

如何在expressjs和mongodb网站中存储图片是最佳方式?

我对Express、Node.js和MongoDB还不太熟悉。我正在为一家服装店建立一个网站。他们希望频繁上传图片,可能每两天就会上传新的图片,并且这些图片需要快速显示在网站上,以缩略图的形式展示。点击图片将显示产品的详细信息等。

我的问题是存储图片的最佳方式是什么?

  1. 将图片存储到硬盘中,只在数据库MongoDB中存储绝对路径?
  2. 将图片以二进制/ base64 的形式存储在数据库MongoDB中?

如何快速加载图片到网站?

谢谢

0
0 Comments

最佳方式就是使用AWS S3和CloudFront服务来存储图片。这样可以提高图片加载速度,并且存储成本非常低。你可以只存储图片的链接或关键字,然后在前端调用URL引用。

感兴趣的链接:

- [uppy.io](https://uppy.io/)

- [uppy和AWS S3](https://uppy.io/docs/aws-s3/)

这种方式的优点是可以提高图片加载速度,并且存储成本较低。通过使用AWS S3和CloudFront服务,可以将图片存储在云端,并通过URL引用在前端加载。这样可以有效地管理和访问大量的图片资源。

这里推荐使用uppy.io库,它是一个现代化的文件上传工具,可以与AWS S3一起使用。通过使用uppy.io和AWS S3,可以轻松实现图片的上传和存储。

同时,AWS S3和CloudFront服务的结合使用,可以进一步提高图片的加载速度。CloudFront是一个全球内容分发网络(CDN),它可以将图片缓存在全球各地,以便用户能够快速访问图片。

总之,使用AWS S3和CloudFront服务是存储图片的最佳方式,它不仅可以提高图片加载速度,还可以大大降低存储成本。通过使用uppy.io库,可以方便地上传和管理图片。让我们来看看具体的代码实现。

const AWS = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');
const s3 = new AWS.S3({
  accessKeyId: '',
  secretAccessKey: '',
});
const upload = multer({
  storage: multerS3({
    s3,
    bucket: '',
    acl: 'public-read',
    key: (req, file, cb) => {
      cb(null, Date.now().toString() + '-' + file.originalname);
    },
  }),
}).single('image');
router.post('/upload', (req, res) => {
  upload(req, res, (err) => {
    if (err) {
      // Handle error
      console.error(err);
      return res.status(500).json({ error: 'Failed to upload image' });
    }
    // Image uploaded successfully
    return res.status(200).json({ message: 'Image uploaded successfully' });
  });
});

以上代码演示了使用multer和multer-s3库将图片上传到AWS S3的过程。你需要替换``、``和``为你自己的AWS访问密钥和存储桶名称。

通过以上的实现,你可以在Express.js和MongoDB网站中存储图片,并且能够快速加载图片。希望这篇文章对你有所帮助!

0
0 Comments

在这篇文章中,我们将探讨在Express.js和MongoDB网站中存储图像的最佳方法。文章中提到了三种解决方案,并分别给出了原因和解决方法。

第一种解决方案是直接将图像存储在MongoDB中。这种方法可以容纳图像文件或任何其他文件类型。通过将文件与MongoDB中的记录相关联,可以轻松地将特定服装文章的描述页面与其对应的图像绑定在一起。然而,这种方法的一个问题是,MongoDB的存储空间是需要付费的,使用的存储空间越多,客户每月支付的费用就越高。

第二种解决方案是将图像存储在与Express服务器关联的硬盘上。这种方法是大多数在线文章和帖子所推荐的。通过将图像保存在本地硬盘上,可以避免使用MongoDB存储空间而产生额外的费用。然而,当服务器扩展到多台机器时,这种方法就会遇到问题,每台机器都有自己的硬盘,当请求通过负载均衡器发送到不同的Express服务器时,可能会导致图像无法访问的问题。

第三种解决方案是使用外部数据存储来保存图像。这种方法可以避免使用MongoDB存储空间和本地硬盘,而是使用像Amazon S3、Azure File Storage或Google Cloud Storage这样的外部数据存储来保存图像。这些外部数据存储系统可以容纳大量数据,并且可以存储任何类型的文件,而不仅仅是图像。与其他两种解决方案相比,使用外部数据存储的好处是成本较低,比如Amazon S3每个月只需支付几美分的存储费用。

将图像存储在MongoDB中可能会导致昂贵的存储费用,将图像保存在本地硬盘上可能会在服务器扩展时出现问题,而使用外部数据存储则是一种成本较低且可靠的解决方案。根据具体需求和预算,选择适合的存储方法对于构建一个高效的Express.js和MongoDB网站至关重要。

0