Android 如何将图像上传到AmazonS3
我正在开发一个Android应用程序,将图像jpg上传到AWS S3。正在上载图像,但我无法使用web浏览器打开它:图像无效或以字符串形式打开Android 如何将图像上传到AmazonS3,android,image,amazon-s3,Android,Image,Amazon S3,我正在开发一个Android应用程序,将图像jpg上传到AWS S3。正在上载图像,但我无法使用web浏览器打开它:图像无效或以字符串形式打开 //skipping error handling for simplicity InputStream is = Utils.streamFromUri(this, uri); byte[] buffer = new byte[FileUtils.getInputSize(is)]; ... //is is restored at this poin
//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,并为每个人提供读取权限
您可能必须设置自定义标题。内容类型:图像/jpeg
这取决于你上传文件的方式,通常由automagic处理
你链接的文件被破坏了。如果您知道图像在您的计算机上很好,请尝试使用其他工具将图像上载到S3
第一个文件只填充了0。第二个文件不是jpeg,但似乎是某种转换的结果,其中包含一些照片数据。在正常情况下,上传应该没有问题。如果您提供有关如何上传代码或工具的详细信息,我们可以从那里开始 更新 您获取上传数据的代码可能不起作用。我不知道你的实用程序的细节,但是当你知道的时候
FileUtils.getInputSize(is)
它可能会读取整个流,因此您将在流的末尾结束,而不读取任何内容以供上传。我强烈建议您使用来读取数据。在读入内存后,可以得到它的大小
更新2
您正在使用字节到字符串的转换。来自Stringbyte[]文档
Constructs a new String by decoding the specified array of bytes using
平台的默认字符集
由于您使用二进制数据,它正在被转换。这实际上也可以从第二个文件中看到,该文件以ef bf bd开头,它是Unicode替换字符。因此,不要使用字符串存储二进制数据。您可以共享此图像的链接吗?您可以使用is.readbuffer;在得到尺寸后,我不知道为什么此时您不会在流的末尾。我看不出你在哪里重新创造它。我看到它隐藏在…它是。我还能错过什么?好吧,我又更新了。我很确定问题出在字节到字符串的转换上。你真的不应该这样做。非常感谢-我绕过了字符串创建,它工作得很好。