【问题标题】:How to transfer base64 image from client to server or download binary / base64 from s3 bucket?如何将 base64 图像从客户端传输到服务器或从 s3 存储桶下载二进制/base64?
【发布时间】:2017-06-25 08:45:24
【问题描述】:

在我的应用程序中,我将照片直接从客户端发送到 s3,使用类似于以下建议的 heroku 推荐:https://devcenter.heroku.com/articles/s3-upload-node

主要的好处是它节省了服务器成本(我假设因为没有使用诸如 multipart-y 表单数据之类的东西将块发送到服务器)。

但是,我希望能够将这些图像也分享到 twitter,这说明了这个要求:

确保 POST 是多部分/表单数据请求。上传文件的原始二进制文件(媒体参数)或其 base64 编码内容(media_data 参数)。尽可能使用原始二进制文件,因为 base64 编码会导致文件更大

我已尝试将客户端 s3 上传所需的 base64 发送回服务器,但取决于照片大小——我经常收到一个错误,即它太大而无法发回。

TLDR

我是否需要使用多方/多部分表单数据将我的照片发送到我的服务器,以便我可以拥有所需的 base64 / 二进制文件来将照片分享到 twitter,或者我可以继续将照片从我的客户端发送到 s3?

然后,以某种方式,高效在服务器上获取所需的 base64 / 二进制文件(可能使用请求模块),然后我可以将图像发送到 twitter?

【问题讨论】:

    标签: node.js amazon-web-services twitter base64 multipartform-data


    【解决方案1】:

    在不大量更改客户端代码的情况下执行此操作的一种相当简单的方法是使用S3 events。 S3 事件可以触发 AWS 中的 lambda 函数,该函数可以将图像发布到 Twitter。您可以使用 lambda 函数中的任何库来高效地发布到 twitter。不确定你是想使用 Lambda 还是坚持 Heroku。

    【讨论】:

      【解决方案2】:

      如果您直接从客户端上传文档以上传到 s3,则您将向客户端公开您的 AWS 密钥/私钥。一种更安全的方法是将图像上传到节点,然后节点再将其上传到 S3。将图像上传到节点服务器的推荐方法是使用 multipart/form-data 并使用Multer 中间件。

      无论上传方式如何,您都可以使用以下代码向 twitter 提供图片。此代码使用 AWS-SDK 模块。

          var s3 = new AWS.S3();
          var filename = req.query.filename;
          var params = {
              Bucket: <bucketname>,
              Key: <image path>
          };
      
          var extension = filename.split('.')[1];
          if (extension == "jpg" || extension == "JPG" || extension == "jpeg" || extension == "JPEG")
          {
              res.setHeader('Content-Type', 'image');
          }
          else if (extension == "png" || extension == "PNG")
          {
              res.setHeader('Content-Type', 'image/png');
          }
      
          s3.getObject(params).createReadStream().pipe(res);
      

      这种方法可以像任何其他快递应用一样轻松扩展。

      【讨论】:

      • 您无需公开您的 AWS 凭证以允许最终用户直接上传到 S3。查找“使用预签名 URL 上传对象”
      • 是的,我的凭据在服务器上是安全的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2013-06-25
      相关资源
      最近更新 更多