我從url下載一個圖像到一個ec2實例(wget),使用imagemagick處理它(convert -actions $ savedfilename),然後將它保存到s3(使用php api)。將imagemagick文件直接保存到ec2的s3
- 是否有可能在ec2上處理圖像並將其直接保存到s3而不寫入s3卷?
- 如果這是可能的,它是否有意義 - 它會更快/更便宜?
- 還有什麼可以做的,以提高過程的效率?
- 是否有API直接從shell保存到s3?
我從url下載一個圖像到一個ec2實例(wget),使用imagemagick處理它(convert -actions $ savedfilename),然後將它保存到s3(使用php api)。將imagemagick文件直接保存到ec2的s3
我猜「不寫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
獲取URL
<?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。
從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
之一我的imagemagick命令有兩個步驟,並且需要在應用第二步之前保存第一步的結果。是否有可能將第一步的結果保存在內存中,而不是在第二步中寫入卷並從內存訪問它? – waigani
發佈一些代碼,然後我可以幫助你。或者看看這個討論:http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20906 – dom
+1有用的評論 - 鏈接正是我所需要的。 – waigani