最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

使用文本输入上传文件的最佳方式

运维笔记admin11浏览0评论

使用文本输入上传文件的最佳方式

使用文本输入上传文件的最佳方式

我正在尝试创建一个项目,用户可以在其中上传文件图像,将该文件上传至amazon s3,并返回图像地址的字符串,该字符串应作为单个文档与文本输入一起传递到mongoDB中例如商品名称,描述,日期等。

到目前为止,我已经创建了一个简单的mongoDB模型,该模型具有名称和图像以测试上传带有一个文本输入的文件,但是当我尝试使用form-urlencoded在邮递员中对其进行测试时,选择一个文件,如果我尝试在form-data中对其进行测试,则会得到一个空字符串作为名称输入,但是我的代码确实读取了该文件并返回了该文件的字符串,但并非两者都在一起。

我的代码是:亚马逊s3的安装文件

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

const { secret_key, access_key, bucket_name } = require("../config/config");

aws.config.update({
    secretAccessKey: secret_key,
    accessKeyId: access_key,
    region: "us-east-2"
});

const s3 = new aws.S3();

const fileFilter = (req, file, cb) => {
    if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
        cb(null, true);
    } else {
        cb(new Error("Invalid Mime Type, only JPEG or PNG"), false);
    }
};

const upload = multer({
    fileFilter: fileFilter,
    storage: multerS3({
        s3: s3,
        bucket: bucket_name,
        acl: "public-read",
        metadata: function(req, file, cb) {
            cb(null, { fieldName: file.fieldname });
        },
        key: function(req, file, cb) {
            cb(null, Date.now().toString());
        }
    })
});

module.exports = upload;

目标路径上载的控制文件

const upload = require("../services/file-upload");
const singleUpload = upload.single("img");

let uploadArtefact = (req, res) => {
    const { name } = req.body;
    singleUpload(req, res, err => {
        if (err) {
            return res.status(422).send({
                errors: [{ title: "File Upload Error", detail: err.message }]
            });
        }

        let artefact = new Artefact({
            name: name,
            img: req.file.location
        });

        if (!name) {
            return res.json({
                success: false,
                error: "Invalid Inputs"
            });
        }
        artefact.save(err => {
            if (err) {
                return res.json({ sucess: false, error: err });
            }
            return res.json({ success: true });
        });
    });
};

module.exports = uploadArtefact;

所以我想知道什么是最好的方法?有没有一种方法可以在一个请求中提交带有文本的文件?我最好希望能够找到一种将它们一起发送的方法。

回答如下:

[没关系,我意识到multer可以解析文本,但是我只需要将const { name } = req.body;放在singleUpload{}部分中。

发布评论

评论列表(0)

  1. 暂无评论