21xrx.com
2024-11-22 06:51:45 Friday
登录
文章检索 我的文章 写文章
Node.js和AWS S3实现图片上传和下载
2023-07-07 19:42:13 深夜i     --     --
Node js AWS S3 图片上传 图片下载

随着互联网技术的不断发展和普及,大批量的图片上传和下载已经成为了日常生活中非常常见的操作。在传统的静态网站中,常采用FTP或者HTTP的方式来进行图片的上传和下载,但是这些方式无法满足现代Web应用中图片传输的需求。

随着云计算的大力推广和Node.js等后端技术的发展,我们可以利用AWS S3和Node.js来实现高效、安全、可靠的文件上传和下载。下面我们将详细介绍如何使用Node.js和AWS S3来实现图片上传和下载。

一、使用 AWS S3 存储图片文件

AWS S3 是一项可扩展的云服务,使用它可以简单快速地存储和检索数据。它可以以一种高度安全,高度灵活和低成本的方式存储数据,并且可以轻松地与其它 AWS 服务集成。

AWS S3 存储仓库使用类似于 UNIX 文件系统的方法进行组织,并且可以将一个或多个文件存储在单个桶中。基于 S3 的存储方案可以大大简化文件的管理,减少本地存储所带来的困扰,并提供可靠的数据备份和恢复功能。

二、利用 Node.js 实现图片上传

使用 AWS S3 来托管图片文件后,接下来需要使用 Node.js 实现图片的上传。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它可以用于 Web 应用的后端开发。

在 Node.js 中需要使用 AWS SDK 来调用 S3 服务。安装 AWS SDK 之后,我们可以使用下列的代码上传图片文件:


const AWS = require('aws-sdk');

const fs = require('fs');

const s3 = new AWS.S3(

  secretAccessKey: '你的 Secret Access Key'

);

const filePath = './test-image.jpg';

const params = {

  ACL: 'public-read',

  Bucket: 'bucket-name',//你的bucket名字

  Key: 'upload/image/test-image.jpg',//存储在aws s3上的路径

  Body: fs.createReadStream(filePath),

  ContentType: 'image/jpeg'

};

s3.upload(params, function(err, data) {

  if (err) {

    console.log('upload fail:', err);

  } else {

    console.log('upload success:', data.Location);

  }

});

上述代码使用了 createReadStream 将本地的图片文件上传到 AWS S3 存储桶中,并返回一个文件链接地址,我们可以通过此链接地址来随时获取此文件。

三、利用 Node.js 实现图片下载

使用 Node.js 实现图片下载需要使用 http 模块来发送 HTTP GET 请求,然后获取图片的流数据,最后将流数据写入文件中。具体实现代码如下:


const http = require('http');

const fs = require('fs');

const options =

  path: '/image/test-image.jpg';

const filePath = './download/test-image.jpg';

const req = http.request(options, function(res) {

  const fileStream = fs.createWriteStream(filePath);

  res.pipe(fileStream);

  fileStream.on('finish', function() {

    console.log('download success');

  });

});

req.on('error', function(err) {

  console.log('download fail:', err);

});

req.end();

利用 Node.js 和 AWS S3,实现图片上传和下载既简单又高效,同时也可以轻松地扩展到其它类型的文件上传和下载。未来,我们相信这种基于云服务的文件传输方式将会越来越多地被应用到实际生产中。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复