aws上传图片
使用aws上传是不使用aksk
·
项目场景:
提示:这里简述项目相关背景:
公司需要使用aws上传图片,但是不能使用aksk,并且图片没有直接访问权限,找了许久没有相关的笔记,所以记录一下
问题描述
不能使用aksk,并且图片没有直接访问权限
public class AwsConfig {
@Value("${aws.accessKey}")
private String accessKey;
@Value("${aws.secretKey}")
private String secretKey;
@Value("${aws.region}")
private String region;
//桶名
@Value("${aws.bucketName}")
private String bucketName;
@Bean
public AmazonS3 getAmazonS3() {
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3 = AmazonS3ClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
//设置服务器所属地区
.withRegion(Regions.AP_SOUTHEAST_1)
.build();
return s3;
}
}
解决方案:
现在使用AmazonS3ClientBuilder来创建AmazonS3,并且将图片下载就能访问图片了
@Bean
public AmazonS3 getS3Client(){
return AmazonS3ClientBuilder.standard().withRegion(Regions.CN_NORTH_1).build();
}
//上传图片的接口
@Override
public ActionResult upload(MultipartFile multipartFile) throws IOException {
TransferManager transferManager = TransferManagerBuilder.standard().withS3Client(s3.getS3Client()).build();
String originalFileName = multipartFile.getOriginalFilename();
assert originalFileName != null;
String key = UUID.randomUUID() + originalFileName.substring(originalFileName.lastIndexOf("."));
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(multipartFile.getContentType());
objectMetadata.setContentLength(multipartFile.getSize());
transferManager.upload(new PutObjectRequest(bucketName, "acafevideo/" + key, multipartFile.getInputStream(), objectMetadata));
//创建一个虚拟路由,用于没有权限访问图片
return ActionResult.ok(baseUrl + contextPath + "/image/" + key);
}
//访问图片
@GetMapping(value = "/{imgName}")
public void getImgUrl(@PathVariable(name = "imgName") String imgName, HttpServletResponse response) {
try {
byte[] bytes = fileUploadService.getImgUrl(imgName);
response.setContentType(MediaType.IMAGE_JPEG_VALUE);
String extensionName = getFileExtension(imgName);
switch (extensionName) {
case "gif":
response.setContentType(MediaType.IMAGE_GIF_VALUE);
break;
case "png":
response.setContentType(MediaType.IMAGE_PNG_VALUE);
break;
}
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(bytes);
outputStream.flush();
outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private String getFileExtension(String fileName) {
if (fileName.lastIndexOf(".") != -1 && fileName.lastIndexOf(".") != 0) {
return fileName.substring(fileName.lastIndexOf(".") + 1);
} else {
return "";
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)