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,并删除本地图片相关推荐

  1. c语言加载本地图片,Unity加载本地图片的2种方式

    1. 使用 WWW 加载,详细查看 unity3d 官方文档. 2. 使用 System.IO 加载,lua 代码如下: local File = luanet.import_type("S ...

  2. android删除本地图片,Android中结合contentResolver.delete和file.delete实现本地图片的删除...

    最近做的一个需求是:将拍照或相册的图片上传服务器后删除对应的本地图片.在实现这个简单的需求的过程中却碰到了两个意想不到的问题. 这两个问题源自于删除本地图片时选用的两个不同的方法 file.delet ...

  3. fastreport打印指定路径图片显示不出来_报表工具中图片文件怎么展示---本地图片--网络图片--数据库图片...

    用于报表展示的图片来源有多种,如:数据库的图片字段.服务器本地图片.网络图片等,因此,报表工具也针对多种图片来源提供了多种多样的处理方式. 下面从不同的图片来源角度,举例介绍报表工具如何设置呈现. 图 ...

  4. [转载]将Excel中的图片URL地址转成图片文件

    原博https://blog.csdn.net/lsg9012/article/details/77162976 前阵子从数据库中导出数据给业务,但是图片是个URL,业务需要在 Excel 中直接显示 ...

  5. Android 删除本地图片

    以前没有写博客的习惯  换了公司之后 事情慢慢变多  也需要掌握很多的新的我不知道知识   遇到很多问题  网上各种百度  好不容易遇到可以修复bug的博客   这次用完关掉   以后遇到还需要重新百 ...

  6. java 删除本地图片_java如何删除

    package com.data.maint; import java.io.File; import org.apache.log4j.Logger; public class ClearTempI ...

  7. 如何获取网络视频(或者说后台返回视频URL)第一帧图片以及获取本地视频的第一帧图片

    在项目开发的时候,有可能会有这样的一种需求:有一段视频需要展示给用户,在界面上先展示视频上的某一帧图片,用户点击的时候再去获取视频资源进行播放.这时,服务器会先给我们返回视频的url,这个时候就需要通 ...

  8. Flutter 图片组件Image、本地图片、远程图片、图片剪切、圆形图片

    1图片组件Image介绍 Flutter 中,我们可以通过 Image 组件来加载并显示图片 Image 的数据源可以是asset.文件.内存以及网络. 这里我们主要给大家讲两个 Image.asse ...

  9. android删除本地图片,Android之删除图库照片

    相关文章:Android手机读取相册图片,根据URI获取图片路径 从图库获取的Uri:content://media/external/images/media/20782 Uri uri = dat ...

最新文章

  1. python画饼图加牵引线_python可视化---饼图添加图例
  2. DPDK pmd驱动初始化(十九)
  3. Node.js 安装报错提示“The error code is 2503“问题解决方法
  4. Xib/Storyboard碰到不同版本的Xcode真是想死啊!
  5. zabbix配置发送报警邮件
  6. mysql的分页怎么不对_jsp+mysql分页显示我的怎么不对啊?显示始终不对!
  7. 浅谈Vue中的虚拟DOM
  8. springMVC 项目在jboss7中配置应用自己的log4j
  9. Linux strace命令 一
  10. 动态绑定dropdownlist --开始拣.NET
  11. Java函数式编程详解
  12. mac启动台(launchpad)图标大小调整
  13. j和jk是有区别的_科普向,大家都说jk,jk是什么意思呢?
  14. python中的箭头符号
  15. tkinter+爬虫实现有道翻译桌面软件
  16. java常用时间工具类
  17. SQL经典案例(学生表,课程表,选课表,教师表) 练习
  18. 华为存储OceanStor 5110V5 CA证书即将过期告警处理
  19. 计算机研究热点发展趋势,[精品]计算机科学前沿热点及发展趋势.doc
  20. ChatGPT发展历程、原理、技术架构详解和产业未来

热门文章

  1. 量子相干和量子纠缠犹如同一硬币的两面般密不可分
  2. 车载电脑(car pc)
  3. 光滑噪声数据常用的方法_如何处理噪声数据
  4. 图像处理之椒盐噪声的添加与去除
  5. 化工印染企业高盐废水处理盐纯化/盐资源化
  6. tp框架配置路由的初学习
  7. V-REP学习笔记之Graph
  8. modbustcp测试工具怎么用_【转帖】年轻人不讲武德=白piao接口测试知识还白piao接口测试工具会员...
  9. Blender PS Zbrush 人物眼球制作2 - Albedo 贴图和UV不匹配修正
  10. Java面试题之常见十五种异常有哪些?