如何使用multer访问数字海洋空间中的文件

时间:2018-06-24 16:43:49

标签: node.js amazon-s3 object-storage

我设法通过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>

有人可以告诉我检索这些文件可能是什么问题吗?

2 个答案:

答案 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);