我正在开发一个将图片(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)
您能否分享一份可上传的工作代码,或就如何解决此问题提供一些指示?
由于
答案 0 :(得分:0)
两件事。
在amazone S3中。您需要将图像的权限设置为Everyone:read。我正在使用Firefox插件S3FOX,然后右键单击,按编辑ACL并给每个人读取访问权限。
您可能需要设置自定义标头。内容类型:image / jpeg
这取决于你如何上传文件,通常这是自动化的。
您链接的文件已毁坏。如果您知道计算机上的图像良好,请尝试使用其他工具将图像上传到S3。
答案 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替换字符。所以不要使用字符串来存储二进制数据。