【问题标题】:node gm - s3 upload on heroku (0 byte)节点 gm - Heroku 上的 s3 上传(0 字节)
【发布时间】:2017-01-16 19:58:12
【问题描述】:

我正在尝试构建一个应用程序来处理图像并将它们上传到 s3。

代码在本地主机上完美运行。但是当我将相同的代码部署到 heroku 时,s3 上上传的图像是 0 字节空的:

这是我的代码:

const fs = require('fs');
const uuid = require('node-uuid');
const Promise = require('bluebird');
const gm = require('gm').subClass({imageMagick: true});
const mime = require('mime');
const Config = require('../../../config/settings');
const AWS = require('aws-sdk');
AWS.config.update({
    accessKeyId: Config.get('/s3/accessKeyId'),
    secretAccessKey: Config.get('/s3/secretAccessKey'),
    region: Config.get('/s3/region')
});
const s3 = new AWS.S3();

const createImage = function (url, width, height, fileName, fileExt) {
    return new Promise(function (resolve, reject) {
        if (typeof fileName === "undefined") {
            fileName = uuid.v1();
        }
        if (typeof fileExt === "undefined") {
            fileExt = "jpg";
        }
        const fullFileName = `${fileName}.${fileExt}`;

        gm(url)
            .resize(width, height, '!')
            .autoOrient()
            .stream(function (err, stdout, stderr) {
                var data = {
                    Bucket: Config.get('/s3/bucketName'),
                    Key: fullFileName,
                    Body: stdout,
                    ContentType: mime.lookup(fullFileName)
                };
                s3.upload(data, function (err, res) {
                    if (err) {
                        reject(err);
                    } else {
                        resolve(res);
                    }
                });
            });
    });
};
module.exports = createImage;

感谢您的帮助!

【问题讨论】:

    标签: node.js heroku amazon-s3 upload gm


    【解决方案1】:

    问题是由 heroku 上的此 imagemagick 策略更新引起的:https://devcenter.heroku.com/changelog-items/891

    我写了一个新的、更具体的问题:imagemagick - change policy.xml on heroku

    【讨论】:

      【解决方案2】:

      我来俱乐部有点晚了,但我可能有一个过去对我有用的解决方法,也许它对其他遇到这个问题的人有用。您可以更改传递给 http 的 url 参数。

      const newURL = url.replace("https", "http");
      
      gm(newURL)
        .resize(width, height, '!')
        .autoOrient()
        .stream(function (err, stdout, stderr) {
            var data = {
                Bucket: Config.get('/s3/bucketName'),
                Key: fullFileName,
                Body: stdout,
                ContentType: mime.lookup(fullFileName)
            };
            s3.upload(data, function (err, res) {
                if (err) {
                    reject(err);
                } else {
                    resolve(res);
                }
            });
        });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-17
        • 2016-09-28
        • 2015-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-05
        • 1970-01-01
        相关资源
        最近更新 更多