Amazon S3 - 不允许的方法
Posted
技术标签:
【中文标题】Amazon S3 - 不允许的方法【英文标题】:Amazon S3 - Method Not Allowed 【发布时间】:2016-01-25 22:46:19 【问题描述】:我正在尝试第一次配置来自 Amazon 的 S3 服务,但我无法上传文件,因为我得到了以下异常(我已经授予用户对 S3 的完全访问权限,但我一直得到这个):
方法不允许(服务:Amazon S3;状态代码:405;错误代码:405 方法不允许;...)
下面的类是我的配置类(为了安全起见,key改成了“xxx”):
public class AmazonConfiguration
private final String ACCESS_KEY = "xxxxxxxxx";
private final String SECRET_KEY = "xxxxxxxxx";
@Bean
private AmazonS3 amazonS3client()
//Credenciais de acesso
AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
AmazonS3 s3Client = new AmazonS3Client(credentials, new ClientConfiguration());
s3Client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(true));
s3Client.setEndpoint("http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/"); //springmvccasadocodigo.s3-website-sa-east-1.amazonaws.com
return s3Client;
下一节课是我尝试上传文件的地方:
@Component
public class FileServer
@Autowired
private HttpServletRequest request;
@Autowired
private AmazonS3 s3;
public String writeAmazonS3(String baseFolder, MultipartFile multpartFile)
try
s3.putObject("springmvccasadocodigo",
multpartFile.getOriginalFilename(),
multpartFile.getInputStream(), new ObjectMetadata());
return "http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/"
+ multpartFile.getOriginalFilename() + "?noAuth=true";
catch (AmazonClientException | IOException e)
e.printStackTrace();
throw new RuntimeException();
【问题讨论】:
【参考方案1】:s3Client.setEndpoint("http://springmvccasadocodigo.s3-website-us-west-2.amazonaws.com/"); //springmvccasadocodigo.s3-website-sa-east-1.amazonaws.com
这不是一个合适的端点。并且将它与“路径样式访问”结合起来使得调试变得更加困难。 (“路径样式语法...要求您在尝试访问存储桶时使用特定于区域的端点。”)
Here's the list of endpoints;如果您的存储桶位于 us-west-2 中,则正确的端点是 s3-us-west-2.amazonaws.com
。但是,这对于 API 的“标签外”使用最有用,例如连接到 OpenStack 资源。
我相信您可以简单地删除这两行(“setEndpoint”和“setS3ClientOptions”)。
【讨论】:
以上是关于Amazon S3 - 不允许的方法的主要内容,如果未能解决你的问题,请参考以下文章
Amazon Web Services:设置 S3 策略以允许 putObject 和 getObject 但拒绝 listBucket
允许来自 Amazon S3 的 AJAX GET? (访问控制允许来源)