所以我想要做的是从网址流式传输图像,使用graphicsmagick处理它并将其上传到s3.我只是不让它工作.
将处理后的图像流式传输到本地磁盘(使用fs.createWriteStream)可以正常工作.
当我缓冲我的流时,s3中的最终图像至少具有预期的大小(kb-wise),但我无法打开该图像.
这就是我目前的进步:
var request = require('request');
var gm = require("gm");
var AWS = require('aws-sdk');
var mime = require('mime');
var s3 = new AWS.S3();
gm(request('http://www.some-domain.com/some-image.jpg'), "my-image.jpg")
.resize("100^", "100^")
.stream(function(err, stdout, stderr) {
var str = '';
stdout.on('data', function(data) {
str += data;
});
stdout.on('end', function(data) {
var data = {
Bucket: "my-bucket",
Key: "my-image.jpg",
Body: new Buffer(str, 'binary'), // thats where im probably wrong
ContentType: mime.lookup("my-image.jpg")
};
s3.client.putObject(data, function(err, res) {
console.log("done");
});
});
});
Run Code Online (Sandbox Code Playgroud)
我确实尝试了一些像创建filewritestream和filereadstream的东西,但我认为应该有一些更清洁的解决方案来解决这个问题......
编辑:我尝试的第一件事是将Body设置为stdout(来自@AndyD的建议答案):
var data …Run Code Online (Sandbox Code Playgroud) 在AWS Rekognition的Javascript API规定,对于 rekognition.compareFaces(params,...)法,SourceImage并TargetImage可以采取Bytes或S3Object.我想用Bytes哪个可以
"字节 - (缓冲区,类型数组,Blob,字符串)"
图像字节的Blob最多5 MB.
当我传递Base64图像的编码字符串时,JS SDK再次重新编码(即双重编码).因此服务器响应错误说
{"__ type":"InvalidImageFormatException","消息":"无效的图像编码"}
有没有人设法使用base64编码图像(而不是)使用compareFaces JS SDK APIS3Object?或使用Bytesparam的任何JavaScript示例都会有所帮助.
javascript sdk base64 amazon-web-services amazon-rekognition
我从 api 下载了一个 ziparchive,其中包含 gzipped 文件,我需要获取 gz 文件并保存到 s3。不想解压缩或任何东西。只需移动到S3。
当我打开存档时,它有一个带有随机数的文件夹 /12345/file1.gz 和许多文件 /12345/file2.gz 等。
我尝试过 yauzl 和 adm-zip,但不明白如何获取存档中的每个条目并发送到 s3。我有 s3-stream-upload 包,我可以用它来发送。就是做对了。谢谢你的帮助
yauzl.open("output.zip", {lazyEntries: true}, function(err, zipfile) {
if (err) console.error('zip err: ', err);
console.log(zipfile);
//upload.write(zipfile);
zipfile.readEntry();
zipfile.on("entry", function(entry) {
// file entry
zipfile.openReadStream(entry, function(err, readStream) {
if (err) console.error('readstream err: ', err);
readStream.on("end", function() {
zipfile.readEntry();
});
console.log(entry);
readStream.pipe(upload) //upload is an s3-upload-stream
.on('finish', function() { console.log('finished'); })
.on('error', function(err) { console.error('stream err: ',err); });
});
});
});
Run Code Online (Sandbox Code Playgroud)
这让我在结束后写入错误,我认为 bcz …
amazon-s3 ×2
node.js ×2
base64 ×1
file-upload ×1
javascript ×1
sdk ×1
streaming ×1
ziparchive ×1