将NodeJS / ReactJS文件上传到数字海洋空间

时间:2018-10-01 18:23:54

标签: node.js reactjs aws-sdk digital-ocean

关于SO的许多不同答案似乎对此有不同的想法...我一直在试图将它们组合在一起并使其正常工作,但是没有运气。

基本上,我的"fc1f56b5-ff41-43ed-b27c-39eac9354323"console.log("uploading....")出现了,但实际上没有任何内容上传。也不会显示错误。

console.log("uploaded....")

server.js

在前端,以防万一,尽管这部分工作正常:

const aws = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");

//aws setup
const s3 = new aws.S3();
aws.config.update({
  secretAccessKey: "MY_SECRET",
  accessKeyId: "MY_KEY",
  region: "us-east-1"
});

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: "filehub",
    key: function(req, file, cb) {
      cb(null, file.originalname);
    }
  })
}).array("upload", 1);

app.post("/files/upload_aws", (req, res, next) => {
  upload(req, res, function(err) {
    console.log("uploading....");
    if (err) {
      console.log(err);
    }
    console.log("uploaded....");
  });
});

1 个答案:

答案 0 :(得分:0)

我认为这里发生了一些不同的事情。

我为Digital Ocean标记了不同的地区。我没有直接将区域放入aws.config更新中,而是:

 val credential:AuthCredential = EmailAuthProvider.getCredential(email,link)
mAuth!!.currentUser?.linkWithCredential(credential)?.addOnCompleteListener(this) { task ->
if (task.isSuccessful) {
       Log.d(TAG, "linkWithCredential:success")
       val user = task.result?.user

} else {
       Log.w(TAG, "linkWithCredential:failure", task.exception)
       Toast.makeText(baseContext, "Authentication failed.",
       Toast.LENGTH_SHORT).show()

}
}

此外,在multer存储功能中还包括一行用于acl的内容:

aws.config.update({
accessKeyId: process.env.SPACES_ACCESS_KEY_ID,
secretAccessKey: process.env.SPACES_SECRET_ACCESS_KEY
});

// Set S3 endpoint to DigitalOcean Spaces
const spacesEndpoint = new aws.Endpoint('nyc3.digitaloceanspaces.com');
const s3 = new aws.S3({
endpoint: spacesEndpoint
});

跟踪在数组末尾输入的任何名称也很重要。就我而言,我有“文件”。我将在POST请求中使用它。

这是我的邮递员上载示例: Postman Sample Upload