【问题标题】:direct upload string from browser to s3 without local file直接从浏览器上传字符串到s3,没有本地文件
【发布时间】:2017-08-05 17:31:50
【问题描述】:

我正在使用 javascript、node.js 和 aws sdk。有很多关于使用签名 URL 直接将现有文件上传到 S3 的示例,但现在我正在尝试上传字符串并在 S3 中创建文件,而没有任何本地保存的文件。有什么建议吗?

【问题讨论】:

    标签: javascript node.js amazon-web-services amazon-s3 aws-sdk


    【解决方案1】:

    请按照这里的例子 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property

    将您的字符串转换为缓冲区并传递它。它应该可以工作。

    【讨论】:

      【解决方案2】:

      没有尝试过amazon-web-servicesamazon-s3aws-sdk,但如果您能够上传FileFormData 对象,您可以在JavaScript 中创建其中一个或两个并上传该对象。

      // create a `File` object
      const file = new File(["abc"], "file.txt", {type:"text/plain"});
      // create a `Blob` object
      // will be converted to a `File` object when passed to `FormData`
      const blob = new Blob(["abc"], {type:"text/plain"});    
      const fd = new FormData();
      fd.append("file", blob, "file.txt");
      

      【讨论】:

      • AWS sdk 接受文件,而不是字符串。这就是我们所需要的。谢谢。
      【解决方案3】:

      你可以试试这样的:

      var fs = require('fs');
      exports.upload = function (req, res) {
          var file = req.files.file;
          fs.readFile(file.path, function (err, data) {
              if (err) throw err; // Something went wrong!
              var s3bucket = new AWS.S3({params: {Bucket: 'mybucketname'}});
              s3bucket.createBucket(function () {
                  var params = {
                      Key: file.originalFilename, //file.name doesn't exist as a property
                      Body: data
                  };
                  s3bucket.upload(params, function (err, data) {
                      // Whether there is an error or not, delete the temp file
                      fs.unlink(file.path, function (err) {
                          if (err) {
                              console.error(err);
                          }
                          console.log('Temp File Delete');
                      });
      
                      console.log("PRINT FILE:", file);
                      if (err) {
                          console.log('ERROR MSG: ', err);
                          res.status(500).send(err);
                      } else {
                          console.log('Successfully uploaded data');
                          res.status(200).end();
                      }
                  });
              });
          });
      };
      

      【讨论】:

        猜你喜欢
        • 2013-09-06
        • 2011-06-13
        • 1970-01-01
        • 2016-03-27
        • 2013-04-25
        • 1970-01-01
        • 2016-01-15
        • 2018-04-12
        • 2013-07-09
        相关资源
        最近更新 更多