Я пытаюсь загрузить файл через узел js, используя multer, но не получаю нужный файл - PullRequest
0 голосов
/ 07 июня 2018

Я использую Multer для загрузки файлов в Node js, но не получаю нужный файл.Я пытаюсь загрузить изображение.Я должен загрузить импортированный файл в корзину S3, но файл не найден, я не знаю, где я ошибаюсь.

Вот мой код js узла:

 import "@tsed/multipartfiles";
    import Path = require("path");
    const rootDir = Path.resolve(__dirname);

    const aws = require("aws-sdk");
    import { Express } from "express";
    import { Controller, Post } from "@tsed/common";
    type MulterFile = Express.Multer.File;
    import { MultipartFile } from "@tsed/multipartfiles";

    @controller("/session")

export class TeleconsultSessionController implements interfaces.Controller {

 @httpPost("/uploadDocuments")
    public async uploadDocument( @MultipartFile() file: MulterFile, req: Request, res: Response) {
        try {                
            aws.config.update({ accessKeyId: "AKIAIYKXXXXXXXXX", secretAccessKey: "iMzE0wfryXXXXXXXXXXXXXXXXXXXX" });
            aws.config.update({ region: "us-east-1" });

            const s3 = new aws.S3();
            s3.upload({
                "Bucket": "teleconsult-development",
                "Key": "image",
                "Body": file
            }, function (err: any, data: any) {
                if (err) {
                    console.log("Error uploading data: ", err);
                } else {
                    console.log(data);
                }
            });
        }
        catch (err) {
            if (err instanceof ValidationException) {
                res.status(400);
                res.send({ error: err.getMessage() });

            } else {
                res.status(500);
                res.send({ error: err.getMessage() });
            }
        }

    }

В ответ, когда я обращаюсь к почтальону, я получаю значение файла как:

Object {------ WebKitFormBoundaryAo1BhVpGaB8uYmsw \ r \ nContent-Disposition: form-data;name: "" image1 "; filename =" 1528114981689_566_28-1-2

1 Ответ

0 голосов
/ 07 июня 2018

При загрузке файлов с помощью multer файлы будут храниться в папке загрузки сервера, в первую очередь это зависит от настроек вашего мультитера.

Если файл успешно загружен мультитером, вы получите следующие данные из req.file.

{ 
fieldname: 'file',
originalname: 'sample.jpg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: './uploads/',
filename: 'd1fccf5dc0125937f6fbe7a4dacfc069',
path: 'uploads/d1fccf5dc0125937f6fbe7a4dacfc069',
size: 23904 
}

Значение path, которое я буду использовать в приведенном ниже примере, не является каталогом.Multer изменит ваше имя файла без расширения.

Вам нужно будет прочитать этот загруженный файл как fileStream, а затем загрузить его на S3.

Например:

let path = req.file;
let fileStream = fs.createReadStream(file.path);
fileStream.on('error', function (err) {
    if (err) { throw err; }
});
fileStream.on('open', function () {
    s3.upload({
        "Bucket": "yourBucketName",
        "Key": file.originalname,
        "Body": fileStream
    }, function (err: any, data: any) {
        if (err) {
            console.log("Error uploading data: ", err);
        } else {
            console.log(data);
        }
    });
});

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...