Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Express 上传到s3后如何返回文件位置_Express_Amazon S3_Sharp - Fatal编程技术网

Express 上传到s3后如何返回文件位置

Express 上传到s3后如何返回文件位置,express,amazon-s3,sharp,Express,Amazon S3,Sharp,我不熟悉Node.js和express 我使用以下函数将图像上传到s3 function defaultContentType(req, file, cb) { setImmediate(function () { var ct = file.contentType || file.mimetype || 'application/octet-stream' cb(null, ct); }); } module.exports = asy

我不熟悉Node.js和express

我使用以下函数将图像上传到s3

function defaultContentType(req, file, cb) {
    setImmediate(function () {
        var ct = file.contentType || file.mimetype || 'application/octet-stream'
        cb(null, ct);
    });
}

    module.exports = async function (fileName, file) {
        aws.config.update({
            secretAccessKey: process.env.AWSSecretKey,
            accessKeyId: process.env.AWSAccessKeyId,
            contentType: defaultContentType,
    
        });
    
        var s3bucket = new aws.S3({
            params: {
                Bucket: process.env.S3_Bucket_Name,
            }
        });
    
        var params = {
            Key: fileName,
            Body: file
        };
    
        var fileData = await s3bucket.upload(params, function (err, data) {
    
    
            if (err) {
                throw err;
            } else {
                return data;
            }
        });
    
        return fileData;

}
在上传图像之前,我使用

 request(req.file.location, async function (err, response, body) {
        var fileInstance = await sharp(body);


        var resizeFile = await fileInstance.resize({
            height: 150,
            fit: 'inside'
        });

        var data = await s3Upload('mobile_' + req.file.key, resizeFile);

        req.mobile = data.Location;

        next();
    });
我的问题是; 图像确实会被调整大小并保存到s3

但“s3Upload”函数不返回文件位置

看来完成这个手术需要一些时间。在它完成之前,未定义的值get return

有人能提出一个解决这个问题的方法吗


改进方法

module.exports = function (fileName, file, finishCallback) {
    // more code

    s3bucket.upload(params, function (err, data) {

        if (err) {
            throw err;
        } else {
            finishCallback(data);
        }
    });

}
将上载方法修改为

s3Upload('mobile_' + req.file.key, resizeFile, (data) => {

            req.mobile = data.Location;
            next();
        });
这似乎是预期的工作。 我不确定这是正确的做事方式。
有没有正确的方法?

根据
数据。Location
应该返回URL我知道,您正在将async await与Callbacks混合将uploadfunction更改为this
var fileData=wait s3bucket.upload(params).promise()
尝试遵循此操作,或者您可以从回调手动创建一个承诺,也许这能帮到你