[英]how to upload image to 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)
您能否分享一个可上传的工作代码,或者给出一些解决方法的指导?
谢谢
两件事情。
在amazone S3中。 您需要将图像上的特权设置为“所有人:读取”。 我正在使用Firefox插件S3FOX,然后右键单击,按“编辑ACL”,然后为每个人提供“读取”权限。
您可能必须设置一个custome标头。 内容类型:图片/ jpeg
这取决于您如何上传文件,通常这是由automagic处理的。
您链接的文件已损坏。 如果您知道计算机上的图像质量很好,请尝试使用其他工具将图像上传到S3。
第一个文件仅填充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替换字符。 因此,请勿使用字符串存储二进制数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.