我设法通过Node js应用程序将pdf文件上传到数字海洋空间,如下所示。 我不知道如何访问这些文件并将其显示给用户。我从本教程object storage file upload,中获得了以下代码,但是没有如何访问文件的示例。 当我尝试使用它们的URL访问它们时,我只会得到空白。 我已经将它们公开,但是尝试从url访问它们仍然毫无所获。 是否仍然可以使用multer访问文件,我是否必须使用RESTFul API发出get请求?如何访问数字海洋空间中存储的文件?
这就是我上传文件的方式
const aws = require("aws-sdk");
const multer = require("multer");
const multerS3 = require("multer-s3");
const spaceEndPoint = new aws.Endpoint("ams3.digitaloceanspaces.com");
const s3 = new aws.S3({
endpoint:spaceEndPoint
})
const upload = multer({
storage:multerS3({
s3:s3,
bucket: "fileRepo",
acl:"public-read",
key:function(request, file, cb){
console.log(file);
cb(null, file.originalname);
}
})
}).array("upload",1);
router.get("uploadFile", function(req,res){
upload(req, res, function(error){
if(error){
console.log(error);
return res.redirect("/");
}
});
})
这就是我尝试检索pdf文件的方式
router.get("/contentPage", function(req, res){
var fileName = req.body.department;
var directory = "https://fileRepo.ams3.digitaloceanspaces.com/" + fileName + ".pdf";
res.render("fileview", {dir: directory});
})
<div id="departmentListWrapper" class="container">
<embed src="<%= dir %>" width="800px" height="2100px" />
</div>
有人可以告诉我检索这些文件可能是什么问题吗?
答案 0 :(得分:0)
尝试此代码段,对我来说很好
import multer from 'multer';
import multerS3 from 'multer-s3';
aws.config.update({
accessKeyId: 'your access key',
secretAccessKey: 'your secret key'
});
var filepath = "path of files folder"
// Create an S3 client setting the Endpoint to DigitalOcean Spaces
var spacesEndpoint = new aws.Endpoint('nyc3.digitaloceanspaces.com');
var s3 = new aws.S3({endpoint: spacesEndpoint});
var params = {
Bucket: bucketName,
Key: keyName,
Body: fs.createReadStream(filepath),
ACL: 'public-read'
};
s3.putObject(params, async function(err, data) {
if (err) {
console.log(err);
} else {
console.log(data);
}
});
答案 1 :(得分:0)
事实证明,数字海洋不知道要上传的文件类型,我必须做到这一点,以便在上传文件之前先读取文件类型,以使浏览器知道我要上传的文件类型通过添加行
contentType:multerS3.AUTO_CONTENT_TYPE
到multer对象,使其看起来像这样。
const upload = multer({
storage:multerS3({
s3:s3,
bucket: "fileRepo",
contentType: multerS3.AUTO_CONTENT_TYPE
acl:"public-read",
key:function(request, file, cb){
console.log(file);
cb(null, file.originalname);
}
})
}).array("upload",1);