失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Java接收并上传图片至S3 返回图片URL 并删除本地图片

Java接收并上传图片至S3 返回图片URL 并删除本地图片

时间:2019-08-15 23:25:17

相关推荐

Java接收并上传图片至S3 返回图片URL 并删除本地图片

Java将图片上传至S3,一般前端页面上传过来的图片,在后端接收形式都为MultipartFile,而S3不支持MultipartFile形式的文件,只支持File类型,所以需要先转换类型再上传。注意:由于上传成功后,本地或者代码运行服务器中图片也会存在,为避免这个问题,上传成功需要本地删除图片。完整代码如下:

(只需要将下面Service中开始部分的变量改成你自己的就可以直接使用)

Controller:

//上传图片@PostMapping("/uploadPicture")public String uploadPicture(HttpServletRequest request) {MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;// 前端传过来的图片参数名为fileMultipartFile multipartFileImageFile = multipartRequest.getFile("file");return uploadService.uploadPicture(multipartFileImageFile);}

Service:

// 需要将这些变量改成你自己的,若只放到桶的根目录下,picturePath设为空private String AWS_ACCESS_KEY = "xxxxxxxxxx";private String AWS_SECRET_KEY = "xxxxxxxxxx";private String region = "xxxx";private String bucketName = "myBucket";private String picturePath = "/picture/mypng"// 初始化连接S3@PostConstructpublic void init() {BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(AWS_ACCESS_KEY, AWS_SECRET_KEY);s3 = AmazonS3ClientBuilder.standard().withRegion(region).withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials)).build();}public String uploadPicture(MultipartFile multipartFileTrayImageFile) {// 调用toFile方法将MultipartFile类型转换为File类型File file = toFile(multipartFileTrayImageFile);String fileUrl = "";long nowTime = System.currentTimeMillis();try {// 调用uploadToS3上传S3并获得图片URL,采用时间戳加文件名字命名,防止命名重复fileUrl = uploadToS3(file, nowTime + "_" + file.getName());// 注意!上传成功后删除,不占用本地或者服务器资源file.delete();} catch (IOException e) {e.printStackTrace();}return fileUrl;}private String uploadToS3(File tempFile, String key) throws IOException {try {String bucketPath = bucketName + floderName;//想要通过公网访问到图片,除了将桶的权限更改之外,还需要在代码中设置withCannedAcl(CannedAccessControlList.PublicRead)s3.putObject(new PutObjectRequest(bucketPath, key, tempFile).withCannedAcl(CannedAccessControlList.PublicRead));String url = cdn + key;return url;} catch (AmazonServiceException ase) {ase.printStackTrace();} catch (AmazonClientException ace) {ace.printStackTrace();}return null;}private File toFile(MultipartFile file) {File toFile = null;if ("".equals(file) || file.getSize() <= 0) {return null;} else {InputStream ins = null;try {ins = file.getInputStream();toFile = new File(file.getOriginalFilename());inputStreamToFile(ins, toFile);ins.close();} catch (IOException e) {e.printStackTrace();}}return toFile;}private static void inputStreamToFile(InputStream ins, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();ins.close();} catch (Exception e) {e.printStackTrace();}}

非常方便,粘贴后,将需要改的变量修改成自己的就可以直接使用!有问题评论,看到第一时间回复。

如果觉得《Java接收并上传图片至S3 返回图片URL 并删除本地图片》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。