我将图像从url下载到ec2实例(wget),使用imagemagick(convert -actions $ savedfilename)处理它,然后将其保存到s3(使用php api)。
答案 0 :(得分:2)
我猜你的意思是“......没有写入 EBS 卷”我是对的吗?您可以将Wgets输出直接传递给ImageMagicks转换,如下所示:
wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png
看看s3cmd,它将允许您直接从命令行与S3交互。我们的示例工作流程将如下所示:
wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png && s3cmd put --acl-public --guess-mime-type test.png s3://example.com/images/test.png
这将为您提供此结果,您可以使用正则表达式过滤以获取公共网址:
File 'test.png' stored as s3://example.com/images/test.png (xxxx bytes)
Public URL of the object is: http://example.com.s3.amazonaws.com/images/test.png
从文字中获取网址:
<?php
$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
$cmd_output = "File 'test.png' stored as s3://example.com/images/test.png (xxxx bytes) Public URL of the object is: http://example.com.s3.amazonaws.com/images/test.png";
if(preg_match($reg_exUrl, $cmd_output, $url)) {
$image_url = $url[0];
}
else {
// no url found …
}
?>
我想这是一个优雅的方式来完成你的过程:)我不确定它是否会更快或更便宜......也许有点因为EBS的坏磁盘I / O.
答案 1 :(得分:0)
来自aws s3 cli cp documentation:
将本地文件流上传到S3
警告:: PowerShell可能会改变管道的编码或将CRLF添加到管道 输入
以下cp命令从标准上载本地文件流 输入到指定的存储桶和密钥:
aws s3 cp - s3://mybucket/stream.txt
与@ dom的回答类似,你可以做到
wget -O - 'http://d24w6bsrhbeh9d.cloudfront.net/photo/4498158_700b_v1.jpg' | convert - test.png | aws s3 cp - s3://example.com/images/test.png --acl public