如何将图像上传到Amazon S3

时间:2011-07-27 07:38:56

标签: android image amazon-s3

我正在开发一个将图片(jpg)上传到AWS S3的Android应用。图像正在上传,但我无法使用网络浏览器打开图像:图像无效或以字符串形式打开。

//skipping error handling for simplicity

InputStream is = Utils.streamFromUri(this, uri);
byte[] buffer = new byte[FileUtils.getInputSize(is)];
...
//is is restored at this point
is.read(buffer);
String data = new String(buffer);
S3.createObjectForBucket(bucketName, objectName, data)

您能否分享一份可上传的工作代码,或就如何解决此问题提供一些指示?

由于

2 个答案:

答案 0 :(得分:0)

两件事。

在amazone S3中。您需要将图像的权限设置为Everyone:read。我正在使用Firefox插件S3FOX,然后右键单击,按编辑ACL并给每个人读取访问权限。

您可能需要设置自定义标头。内容类型:image / jpeg

这取决于你如何上传文件,通常这是自动化的。

您链接的文件已毁坏。如果您知道计算机上的图像良好,请尝试使用其他工具将图像上传到S3。

http://www.s3fox.net/

答案 1 :(得分:0)

第一个文件只填0。第二个文件不是jpeg,但似乎是某种转换的结果(其中有一些照片数据)。在正常情况下上传应该没有问题。如果您提供有关上传方式(代码或工具)的详细信息,我们可以从那里开始。


更新

获取上传数据的代码可能不起作用。我不知道有关您的实用程序的具体信息,但是当您这样做时

FileUtils.getInputSize(is)

它可能会读取整个流,因此您最终会在其结尾处读取内容而无需读取内容。我强烈建议您使用Apache Commons IO来读取数据。你可以在读入内存后得到它的大小。


更新2

您正在使用字节到字符串转换。来自String(byte[])文档

Constructs a new String by decoding the specified array of bytes using 

平台的默认字符集。

由于你使用二进制数据,它正在被转换。实际上也可以从第二个文件中看到,该文件以ef bf bd开头,它是Unicode替换字符。所以不要使用字符串来存储二进制数据。