【问题标题】:Android Amazon S3 file upload not workingAndroid Amazon S3 文件上传不起作用
【发布时间】:2016-01-10 10:34:11
【问题描述】:

我正在尝试将 sd 卡上的文件上传到我的 amazon s3 存储桶。这是课程:

public class FileUploadDownload
{
    Context context;
    boolean transferComplete = false;
    float transferPercentage = 0;
    public FileUploadDownload(Context context)
    {
        this.context = context;
    }

    public void uploadFile(File file , String nameOfFile)
    {
        CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                context,
                "cognito_identity_pool_id", // Identity Pool ID
                Regions.EU_WEST_1 // Region
        );
        AmazonS3 s3 = new AmazonS3Client(credentialsProvider);
        TransferUtility transferUtility = new TransferUtility(s3, context);
        TransferObserver observer = transferUtility.upload(
                "s3_bucket",     /* The bucket to upload to */
                nameOfFile,    /* The key for the uploaded object */
                file        /* The file where the data to upload exists */
        );
        observer.setTransferListener(new TransferListener() {
            @Override
            public void onStateChanged(int id, TransferState state) {
                Toast.makeText(context,"State changed to : "+state.toString(),Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

              //  transferPercentage = (float)bytesCurrent/(float)bytesTotal;
                if(bytesCurrent == bytesTotal)
                {
                //    transferComplete = true;
                    Toast.makeText(context,"Upload completed!",Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onError(int id, Exception ex) {
                Toast.makeText(context,"Upload Unsuccessful due to `"+ex.toString(),Toast.LENGTH_LONG).show();
            }
        });
    }
}

这是我在 Activity 的 OnCreate() 方法中实现的代码 sn-p:

 File sdCard = Environment.getExternalStorageDirectory();
    File dir = new File (sdCard.getAbsolutePath() + "/EpisodeRecorder/User1/Episode1/User1e1p1.jpg");
    FileUploadDownload fud = new FileUploadDownload(this);
    fud.uploadFile(dir,"trialFileUpload.jpg");

这是清单的顶部:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/CustomActionBarTheme" >
    <service
        android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
        android:enabled="true" />
.....

我正在通过 toasts 显示所有调试消息。最初它显示“IN PROGRESS”,过了一会儿,它显示“FAILED” 错误消息显示“java.lang.IllegalStateException” 在调试日志中它说:

10-12 21:01:01.138   1252-14041/? E/CloudSettingsConnection﹕ Connection failed : SERVER_ERROR

我无法弄清楚发生了什么。如果您能指出错误,那就太好了。或者,如果您能弄清楚错误是在 Amazon s3 / cognito / IAM 设置还是代码中,我会很高兴。谢谢!

这是所要求的整个堆栈跟踪:

    javax.net.ssl.SSLException: Write error: ssl=0x60970398: I/O error during system call, Connection reset by peer
            at com.android.org.conscrypt.NativeCrypto.SSL_write(Native Method)
            at com.android.org.conscrypt.OpenSSLSocketImpl$SSLOutputStream.write(OpenSSLSocketImpl.java:731)
            at java.io.BufferedOutputStream.write(BufferedOutputStream.java:131)
            at com.android.okhttp.internal.http.HttpTransport$FixedLengthOutputStream.write(HttpTransport.java:236)
            at com.amazonaws.http.UrlHttpClient.write(UrlHttpClient.java:172)
            at com.amazonaws.http.UrlHttpClient.writeContentToConnection(UrlHttpClient.java:129)
            at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:65)
            at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:353)
            at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:196)
            at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4204)
            at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1618)
            at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.uploadSinglePartAndWaitForCompletion(UploadTask.java:174)
            at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:74)
            at com.amazonaws.mobileconnectors.s3.transferutility.UploadTask.call(UploadTask.java:40)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:841)
10-13 00:37:56.427  14450-14483/? E/UploadTask﹕ Unable to execute HTTP request: Write error: ssl=0x60970398: I/O error during system call, Connection reset by peer
10-13 00:37:56.497  14450-14450/? D/UPLOAD FAIL﹕ java.lang.IllegalStateException: Transfer failed.

【问题讨论】:

  • 您使用的是什么版本的 SDK? (最新是 2.2.7)您能否发布错误的完整堆栈跟踪?
  • 我在 gradle build 文件的依赖项下添加了这些。所以我假设这是最新版本的 sdk... compile 'com.amazonaws:aws-android-sdk-core:2.+' compile 'com.amazonaws:aws-android-sdk-cognito:2.+' compile 'com.amazonaws:aws-android-sdk-s3:2.+' 编译 'com.amazonaws:aws-android-sdk-ddb:2.+'
  • 嗯,我没有发现任何问题,我只是写了一个示例,它似乎工作正常。你在使用无线网络吗?你的连接强度是多少?您是否遇到了某种奇怪的网络障碍(代理、防火墙?)这是一致的还是间歇性的?
  • 那么 Cognito/IAM 设置可能有问题?
  • 我正在使用我的大学 Wifi……速度非常快。

标签: java android amazon-web-services amazon-s3 aws-sdk


【解决方案1】:

我不确定这是否适合你,但我遇到了同样的问题,我发现文件名最后有“.png”,所以我删除了它,它之前工作删除它我检查了 currentBytes,在它给我 FAILED 状态之前,currentBytes 的数量等于 totalBytes 但我还是得到了状态 FAILED,所以

尝试删除文件名中的任何扩展名

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2015-11-29
    • 2020-08-14
    • 2019-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多