【问题标题】:AWS Download function issue with file path文件路径的 AWS 下载功能问题
【发布时间】:2022-06-26 05:36:55
【问题描述】:

我已经使用以下代码实现了一个下载 aws s3 文件的功能:

public void credentialsProvider()
{
    CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
            getApplicationContext(), "us-east-2:xxxxxx-xxxxx-xxxxx-xxxx-xxxxxxx", Regions.US_EAST_2
    );
   setAmazonS3Client(credentialsProvider);
    System.out.println("setAmazonS3Client done");
}

public void setAmazonS3Client( CognitoCachingCredentialsProvider credentialsProvider)
{
    s3 = new AmazonS3Client(credentialsProvider);

    s3.setRegion(Region.getRegion(Regions.US_EAST_2));
}

public void setTransferUtility()
{
    transferUtility = new TransferUtility(s3, getApplicationContext());
    System.out.println("setTransferUtility done");
}

public void setFileDownload()
{
    final String path = this.getFilesDir().getAbsolutePath();
    File myFile = new File(path);
    TransferObserver transferObserver = transferUtility.download("sample-bucket-001", "images-4.jpeg", myFile);
    transferObserverListener(transferObserver);
}

public void transferObserverListener(TransferObserver transferObserver)
{
    transferObserver.setTransferListener(new TransferListener() {
        @Override
        public void onStateChanged(int id, TransferState state) {
            System.out.println("onStateChanged: "+ state);
            if(state == TransferState.FAILED || state == TransferState.WAITING_FOR_NETWORK){
                
            }
        }

        @Override
        public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
            int percentage = (int)(bytesCurrent/bytesTotal * 100);
            System.out.println("percentage: "+ percentage);
        }

        @Override
        public void onError(int id, Exception ex) {
            System.out.println("Error faced: "+ ex.toString());
        }
    });
} 

当我尝试执行以下代码时,出现以下错误:

  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxxxxx.xxxxxxxx/com.xxxxxx.xxxxxxxx.Activity}: java.lang.IllegalArgumentException: Invalid file: /data/user/0/com.xxxxxx.xxxxxxxx/files/

我无法将文件保存在外部存储上,因为我更喜欢隐藏和保护它们,并在应用程序被删除时将其删除。我曾经使用路径来保存文件,这些文件是直接从互联网加载的,没有问题。 请就此事提出建议。

【问题讨论】:

    标签: java android-studio amazon-s3 illegalargumentexception awss3transferutility


    【解决方案1】:

    提供给TransferUtility 的文件路径需要包含文件名,例如:

    final String path = this.getFilesDir().getAbsolutePath() + "images-4.jpeg";
    

    【讨论】:

    • 谢谢你的建议,其实经过这么多试验,原来这条路一定是新的,以前没用过,希望亚马逊的反馈能更具体一些。当我给它实际工作的文件路径提供进一步的扩展名(不是下载的文件的名称)时。
    【解决方案2】:

    我终于找到了问题的解决方案,这很简单,使用一个全新的、以前未使用过的路径,这样它就可以创建一个文件夹来存储下载的图片或文件。

    final String path = this.getFilesDir().getAbsolutePath()+"/zip";
    

    我希望亚马逊的反馈能比“无效文件”更具体一点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多