将上传文件的URL获取到S3(文件上传后)

时间:2019-12-03 13:47:16

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

给出一个链接,当用户单击该链接时,将下载PDF,

我想将文件上传到S3,然后获取将是公共的Amazon S3 URL(我不希望用户看到真实的Link,所以这就是为什么我希望将其上传到S3)。 / p>

考虑代码:

module.exports = class S3Uploader {
  uploadPdfFromURLToS3 = urlToUpload => {
    import aws from "aws-sdk";
    const request = require("request");
    const s3 = new aws.S3();
    const config = require("config");
    var uuidv4 = require("uuid/v4");
    var filename = uuidv4() + ".pdf";

    aws.config.update({
      accessKeyId: config.get("-------------"),
      secretAccessKey: config.get("-----------------")
    });

    var promise = new Promise((resolve, reject) => {
      return request({ url: urlToUpload, encoding: null }, function(
        err,
        res,
        body
      ) {
        if (err) return reject({ status: 500, error: err });

        return resolve({ status: 200, body: body });
      });
    });

    promise.then(pdf => {
      if (pdf.status == 200) {

        s3.putObject(
          {
            Bucket: "-----Your-Bucket-Name",
            Body: pdf.body,
            Key: filename,
            ACL: "public-read"
          },
          (err, data) => {
            if (err) console.log(err);
            else 
            {
                console.log("uploaded");    
                // Get the S3 Public link ????
            }
          }
        );
      }
    });
  };
};

文件成功上传后,如何在回调中获取链接?

3 个答案:

答案 0 :(得分:2)

您可以使用字符串连接构建URL。

https://your-bucket-name.s3-eu-west-1.amazonaws.com/filename

确保您使用的区域正确。

答案 1 :(得分:0)

您可以尝试在$(data.Location)行中添加console.log("uploaded")

console.log("uploaded. $(data.Location)");

答案 2 :(得分:0)

**尝试一下****主要更改在s3.putObject()

  module.exports = class S3Uploader {
  uploadPdfFromURLToS3 = urlToUpload => {
    import aws from "aws-sdk";
    const request = require("request");
    const s3 = new aws.S3();
    const config = require("config");
    var uuidv4 = require("uuid/v4");
    var filename = uuidv4() + ".pdf";

    aws.config.update({
      accessKeyId: config.get("-------------"),
      secretAccessKey: config.get("-----------------")
    });

    var promise = new Promise((resolve, reject) => {
      return request({ url: urlToUpload, encoding: null }, function(
        err,
        res,
        body
      ) {
        if (err) return reject({ status: 500, error: err });

        return resolve({ status: 200, body: body });
      });
    });

    promise.then(pdf => {
      if (pdf.status == 200) {

        s3.putObject(
          {
            Bucket: "-----Your-Bucket-Name",
            Body: pdf.body,
            Key: filename,
            ACL: "public-read"
          },async(err,data)=>{if(err){console.log("error")}
           else
           console.log(data.location) //get pdf url
         }

        );
      }
    });
  };
};