Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring Post请求返回404,用于带邮递员的弹簧靴_Spring_Amazon Web Services_Spring Boot_Amazon S3 - Fatal编程技术网

Spring Post请求返回404,用于带邮递员的弹簧靴

Spring Post请求返回404,用于带邮递员的弹簧靴,spring,amazon-web-services,spring-boot,amazon-s3,Spring,Amazon Web Services,Spring Boot,Amazon S3,我正在尝试使用postman测试我为spring boot应用程序创建的一个post请求。我通过邮递员发送的邮件请求总是返回404 我已经为get请求创建了相同的映射路由,通过邮递员,get请求可以按预期工作 我已经使用aws cli进行了测试,并确保我拥有用于将文件上载到S3的正确访问密钥和密钥 我的服务代码 @服务 公共类AmazonClient{ 私有AmazonS3 S3客户端; @值(${amazonProperties.endpointUrl}”) 私有字符串端点URL; @值(

我正在尝试使用postman测试我为spring boot应用程序创建的一个post请求。我通过邮递员发送的邮件请求总是返回404

  • 我已经为get请求创建了相同的映射路由,通过邮递员,get请求可以按预期工作
  • 我已经使用aws cli进行了测试,并确保我拥有用于将文件上载到S3的正确访问密钥和密钥
我的服务代码

@服务
公共类AmazonClient{
私有AmazonS3 S3客户端;
@值(${amazonProperties.endpointUrl}”)
私有字符串端点URL;
@值(${amazonProperties.bucketName}”)
私有字符串bucketName;
@值(${amazonProperties.accessKey}”)
私有字符串访问密钥;
@值(${amazonProperties.secretKey}”)
私钥;
@施工后
私有void initializeeamazon(){
AWSCredentials credentials=new BasicAWSCredentials(this.accessKey,this.secretKey);
this.s3client=AmazonS3ClientBuilder.standard()。带区域(Regions.US\u EAST\u 2)。带凭据(
新的AWSStaticCredentialsProvider(凭据)).build();
}
@异步的
公共字符串上载文件(MultipartFile MultipartFile,布尔启用PublicReadAccess){
字符串fileUrl=“”;
系统输出打印项次(“Reach”);
试一试{
File File=convertMultiPartToFile(multipartFile);
字符串文件名=generateFileName(多部分文件);
System.out.println(“文件名:“+FileName”);
fileUrl=endpointUrl+“/”+bucketName+“/”+fileName;
PutObjectRequest PutObjectRequest=新的PutObjectRequest(this.bucketName、文件名、文件);
如果(启用PublicReadAccess){
putObjectRequest.withCannedAcl(CanneDaccessController.PublicRead);
}
s3client.putObject(putObjectRequest);
delete();
}捕获(例外e){
e、 printStackTrace();
}
返回fileUrl;
}
私有文件convertMultiPartToFile(MultipartFile文件)引发IOException{
File convFile=新文件(File.getOriginalFilename());
FileOutputStream fos=新的FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
返回文件;
}
私有字符串generateFileName(多部分文件多部分){
返回新日期().getTime()+“-”+多部分.getOriginalFilename().replace(“,”);
}
公共字符串deleteFileFromS3Bucket(字符串文件URL){
字符串fileName=fileUrl.substring(fileUrl.lastIndexOf(“/”)+1);
s3client.deleteObject(新的DeleteObjectRequest(bucketName,文件名));
返回“删除成功”;
}
}
我的控制器的代码:


@RestController
@请求映射(“/storage/files”)
公共类BucketController{
私有AmazonClient AmazonClient;
@自动连线
BucketController(AmazonClient AmazonClient){
this.amazonClient=amazonClient;
}
@GetMapping
公共字符串getFile(){
返回“文件”;
}
@后映射(“/file”)
公共字符串文件(){
返回“到达!”;
}
@邮戳
公共字符串上载文件(@RequestPart(value=“file”)多部分文件){
System.out.println(“Reach!!”);
返回此.amazonClient.uploadFile(文件,true);
}
@删除映射
公共字符串deleteFile(@RequestPart(value=“url”)字符串文件url){
返回此.amazonClient.deleteFileFromS3Bucket(fileUrl);
}
}
我的安全配置:

@覆盖
受保护的无效配置(HttpSecurity http)引发异常{
http.authorizeRequests()
.antMatchers(“/storage*”).permitAll();
通过邮递员,我选择了一个POST请求并将
http://localhost:8080/storage/files/file
,在正文中,我输入了一个键“file”,并将该值设置为文件类型,并从本地文件中选择了一个文件。 以下是答复:

{
    "timestamp": "2019-09-02T19:09:54.864+0000",
    "status": 404,
    "error": "Not Found",
    "message": "No message available",
    "path": "/storage/files/file"
}


这几乎可以肯定是您的安全配置


您是否尝试过:
.antMatchers(“/storage/**”)
而不是?

谢谢您的回答,我尝试过/storage/**但仍然收到相同的错误,需要指出的是,我能够得到响应:“Files”来自相同的get API调用。基于您的控制器,您应该只获得
get/storage/files
的响应,而不是
get/storage/files/file
。这不是一个苹果对苹果的比较