AWS Java S3上传错误:“配置文件不能为空” [英] AWS Java S3 Uploading error: "profile file cannot be null"

查看:529
本文介绍了AWS Java S3上传错误:“配置文件不能为空”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

尝试从Java Spring应用程序上传文件到Amazon S3时出现异常。方法非常简单:

I get an exception when trying to upload a file to Amazon S3 from my Java Spring application. The method is pretty simple:

private void productionFileSaver(String keyName, File f) throws InterruptedException {

        String bucketName = "{my-bucket-name}";
        TransferManager tm = new TransferManager(new ProfileCredentialsProvider());        
        // TransferManager processes all transfers asynchronously, 
        // so this call will return immediately.
        Upload upload = tm.upload(
                bucketName, keyName, new File("/mypath/myfile.png"));

        try {
            // Or you can block and wait for the upload to finish
            upload.waitForCompletion();
            System.out.println("Upload complete.");
        } catch (AmazonClientException amazonClientException) {
            System.out.println("Unable to upload file, upload was aborted.");
            amazonClientException.printStackTrace();
        }
    }

这与亚马逊提供的基本相同这里,与完全相同的消息相同的异常(配置文件不能尝试此其他版本时出现null。
问题与文件不存在或为空无关(我已经检查过千种方式, TransferManager.upload 方法收到的File参数存在在调用之前)。

It is basically the same that amazon provides here, and the same exception with the exactly same message ("profile file cannot be null") appears when trying this other version. The problem is not related to the file not existing or being null (I have already checked in a thousand ways that the File argument recieved by TransferManager.upload method exists before calling it).

我找不到有关我的异常消息配置文件不能为空的任何信息。错误日志的第一行如下:

I cannot find any info about my exception message "profile file cannot be null". The first lines of the error log are the following:

com.amazonaws.AmazonClientException: Unable to complete transfer: profile file cannot be null
    at com.amazonaws.services.s3.transfer.internal.AbstractTransfer.unwrapExecutionException(AbstractTransfer.java:281)
    at com.amazonaws.services.s3.transfer.internal.AbstractTransfer.rethrowExecutionException(AbstractTransfer.java:265)
    at com.amazonaws.services.s3.transfer.internal.AbstractTransfer.waitForCompletion(AbstractTransfer.java:103)
    at com.fullteaching.backend.file.FileController.productionFileSaver(FileController.java:371)
    at com.fullteaching.backend.file.FileController.handlePictureUpload(FileController.java:247)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)

我的S3策略允许为所有类型的用户获取和放置对象。

My S3 policy allows getting and puttings objects for all kind of users.

有关正在发生的事情的任何想法吗?

Any idea about what's happening?

推荐答案


ProfileCredentialsProvider()创建一个新的配置文件凭据提供程序,该提供程序返回为默认配置文件配置的AWS安全凭据。

ProfileCredentialsProvider() creates a new profile credentials provider that returns the AWS security credentials configured for the default profile.

因此,如果您没有在〜/ .aws / credentials ,在尝试放置对象时,会产生该错误。

So, if you haven't any configuration for default profile at ~/.aws/credentials, while trying to put object, it yields that error.

如果在Lambda服务上运行代码,它将不提供此文件。在这种情况下,您也不需要提供凭据。只需将正确的IAM角色分配给lambda函数,然后使用默认构造函数就可以解决问题。

If you run your code on Lambda service, it will not provide this file. In that case, you also do not need to provide credentials. Just assign right IAM Role to your lambda function, then using default constructor should solve issue.

您可能想要更改 TransferManager 构造函数根据您的需要。

You may want to change TransferManager constructor according to your needs.

这篇关于AWS Java S3上传错误:“配置文件不能为空”的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆