我需要先调整图像大小,然后再将其上传到s3(亚马逊)。 我试过这个功能,但它不起作用。
以下是上传图片的功能。
我的文件名是:var AWS = require('aws-sdk'),
fs = require('fs');
var express = require("express");
var app = express();
var im = require('imagemagick');
// For dev purposes only
AWS.config.update({ accessKeyId: '', secretAccessKey: '' });
// Read in the file, convert it to base64, store to S3
var fileStream = fs.createReadStream('beach_life-normal.jpg');
fileStream.on('error', function (err) {
if (err) { throw err; }
});
fileStream.on('open', function () {
var s3 = new AWS.S3();
im.resize({
srcPath: 'beach_life-normal.jpg',
dstPath: 'beach_life-normal-small.jpg',
width: 256
});
s3.putObject({
Bucket: 'adinoauploadefile',
Key: 'beach_life-normal.jpg',
Body: fileStream
}, function (err) {
if (err) { throw err; }
});
});
我尝试了这个新代码,但它仍无效!!!
这是我的代码:
.label-cont{
position: absolute!important; /*Important used only to example. Could be overrated with hierarchy*/
right: 60px;
}
答案 0 :(得分:0)
在您的示例中,您需要在调整图像大小(s3.putObject
)之前将图像保存到S3(im.resize
)。在put之前移动resize函数。
您还没有将图像传递给调整大小功能;你需要像
这样的东西im.resize(fileStream, { // pass in the image
height:100,
width: 200
}, function(err, stdout, stderr){
if (err) throw err;
console.log('resized image to fit within 200x200px');
});
检查您正在使用的库的文档以获取正确的语法。
答案 1 :(得分:0)
你似乎缺乏"之前的基本概念"和数据流,但无论如何我都会尝试。
您需要在读取文件和上传到S3之间插入内容。 convert
进程似乎是一个好主意。
var args = ['beach_life-normal.jpg', '-resize', '200x200>', 'JPEG:-']
var convert = child_process.spawn('convert', args);
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'adinoauploadefile',
Key: 'beach_life-normal.jpg',
Body: convert.stdout
},
// ...
我会将错误处理等等留给您。
答案 2 :(得分:0)
使用此代码。
im.convert(['kittens.jpg', '-resize', '25x120', 'kittens-small.jpg'],
function(err, stdout){
if (err) throw err;
console.log('stdout:', stdout);
});
代替kittens.jpg,您可以提供图像路径,或者在您的情况下,您可以使用fileStream和kittens-small.jpg将是已调整大小的图像名称的名称。