Как получить доступ к файлам на цифровых океанских пространствах с помощью Multer - PullRequest
0 голосов
/ 24 июня 2018

Мне удалось загрузить PDF-файлы в цифровых океанских пространствах с помощью приложения узла js, как показано ниже. Я не знаю, как получить доступ к этим файлам и показать их пользователю. Я получил приведенный ниже код из этого урока, загрузка файла хранилища объектов, , но нет примера того, как получить доступ к файлам. Когда я просто пытаюсь получить к ним доступ по их URL, я просто получаю пробел. Я сделал их публичными, но до сих пор не получаю абсолютно ничего, пытаясь получить к ним доступ с URL. Есть ли еще способ получить доступ к файлам с помощью multer? Нужно ли делать запрос get с помощью API RESTFul? Как мне получить доступ к файлам, хранящимся в цифровом океане?

Так я загружаю файлы

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("/");
		}
	});
})

И вот как я пытаюсь получить pdfs

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 голосов
/ 13 января 2019

Оказывается, что Digital Ocean не знал, какой тип файла был загружен, мне пришлось сделать так, чтобы тип файла читался до его загрузки, чтобы браузер знал, какой тип файла я пытался загрузить добавив строку

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);
0 голосов
/ 26 июля 2018

Попробуйте этот фрагмент кода, у меня отлично работает

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);
    }
  });
...