首页 > 编程语言 >java上传图片

java上传图片

时间:2024-08-19 13:54:50浏览次数:11  
标签:java String image file multipartFile 上传 resources 图片

原文:

https://blog.csdn.net/f7ashion/article/details/137058218

我们在resources目录下创建image目录来存放上传的图片

 

service层懒的写,就都写controller层了。


@RestController
@RequestMapping("/upload")
public class upload {

@PostMapping("/pic")
public String upLoad(@RequestParam("multipartFile")MultipartFile multipartFile) {
//判断图片是否存在
if (multipartFile.isEmpty()) {
return null;
}
//图片的新名字,使用uuid为了图片名字的唯一性,防止重名
String name = UUID.randomUUID().toString().replace("-","");
/*
* 获取上传图片的后缀
* multipartFile.getOriginalFilename()获取图片名字
* 例如:图片名字是picture.png,最后type会等于.png
* substring和lastIndexOf都是String的方法,不会自己搜
*/
String type = multipartFile.getOriginalFilename().
substring(multipartFile.getOriginalFilename().lastIndexOf('.'));

//保存图片的路径,我们存放在resources下static下的image
String value = "src/main/resources/static/image/";
//创建文件
File file = new File(value+name+type);
try {
//transferTo 图片复制
multipartFile.transferTo(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
return file.getAbsolutePath();
}
}
我们使用postman传照片。

 

结果报错了,明显我们要保存的路径是不对的,为什么,因为 multipartFile 要的是绝对路径,不是相对路径,如果是相对路径的话,他不会在你相对路径前面添加你项目的路径,而是tomcat的路径,因此我们修改一下。

修改后:

@RestController
@RequestMapping("/upload")
public class upload {

@PostMapping("/pic")
public String upLoad(@RequestParam("multipartFile")MultipartFile multipartFile) {
//判断图片是否存在
if (multipartFile.isEmpty()) {
return null;
}
//图片的新名字,使用uuid为了图片名字的唯一性,防止重名
String name = UUID.randomUUID().toString().replace("-","");
/*
* 获取上传图片的后缀
* multipartFile.getOriginalFilename()获取图片名字,例如:picture.png
* substring和lastIndexOf都是String的方法,不会自己搜
*/
String type = multipartFile.getOriginalFilename().
substring(multipartFile.getOriginalFilename().lastIndexOf('.'));

//保存图片的路径,我们存放在resources下static下的image
//修改后的代码
String value = "D:/code/picture/src/main/resources/static/image/";
//创建文件
File file = new File(value+name+type);
try {
//transferTo 图片复制
multipartFile.transferTo(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
return file.getAbsolutePath();
}
}
我们再使用postman上传

 

结果对了:我们的目录出现了上传的图片

 

一般照片的访问路径是要保存到数据库,然后前端根据路径找到照片的。

@RestController
@RequestMapping("/upload")
public class upload {

@PostMapping("/pic")
public String upLoad(@RequestParam("multipartFile")MultipartFile multipartFile) {
//判断图片是否存在
if (multipartFile.isEmpty()) {
return null;
}
//图片的新名字,使用uuid为了图片名字的唯一性,防止重名
String name = UUID.randomUUID().toString().replace("-","");
/*
* 获取上传图片的后缀
* multipartFile.getOriginalFilename()获取图片名字,例如:picture.png
* substring和lastIndexOf都是String的方法,不会自己搜
*/
String type = multipartFile.getOriginalFilename().
substring(multipartFile.getOriginalFilename().lastIndexOf('.'));

//保存图片的路径,我们存放在resources下static下的image
String value = "D:/code/picture/src/main/resources/static/image/";
//创建文件
File file = new File(value+name+type);
try {
//transferTo 图片复制
multipartFile.transferTo(file);
} catch (IOException e) {
throw new RuntimeException(e);
}


//在数据库保存照片的访问路径,数据库懒得建,就没写。
// 打印程序的 IP 地址、端口号和照片路径
//这里获取ip地址和端口号有高级写法,自己搜。但是我这么写也没毛病。
String photoUrl = "http://" + "127.0.0.1" + ":" + "8080" + "/image/" + file.getName();
System.out.println(photoUrl);

return file.getAbsolutePath();
}
}
我们浏览器是能访问到的。

 

如果你的程序要部署到云服务器上,那绝对路径和照片的url是要更改的

// 使用 System 类的 getProperty() 方法获取用户的当前工作目录
// 如果路径是这个D:/code/picture/src/main/resources/static/image/
// userDir 会是 D:\code\picture
String userDir = System.getProperty("user.dir");
//保存图片的路径,我们存放在resources下static下的image
String value = userDir + "\\src\\main\\resources\\static\\image\\";
//这要写你的云服务器的ip
String ip = "127.0.0.1";
//你程序的端口号
String port = "8080";
String photoUrl = "http://" + ip + ":" + port + "/image/" + file.getName();
//保存到你的数据库
完整代码:

@RestController
@RequestMapping("/upload")
public class upload {

@PostMapping("/pic")
public String upLoad(@RequestParam("multipartFile")MultipartFile multipartFile) {
//判断图片是否存在
if (multipartFile.isEmpty()) {
return null;
}
//图片的新名字,使用uuid为了图片名字的唯一性,防止重名
String name = UUID.randomUUID().toString().replace("-","");
/*
* 获取上传图片的后缀
* multipartFile.getOriginalFilename()获取图片名字,例如:picture.png
* substring和lastIndexOf都是String的方法,不会自己搜
*/
String type = multipartFile.getOriginalFilename().
substring(multipartFile.getOriginalFilename().lastIndexOf('.'));


// 使用 System 类的 getProperty() 方法获取用户的当前工作目录
// 如果路径是这个D:/code/picture/src/main/resources/static/image/
// userDir 会是 D:\code\picture
String userDir = System.getProperty("user.dir");
//保存图片的路径,我们存放在resources下static下的image
String value = userDir + "\\src\\main\\resources\\static\\image\\";
//创建文件
File file = new File(value+name+type);
try {
//transferTo 图片复制
multipartFile.transferTo(file);
} catch (IOException e) {
throw new RuntimeException(e);
}
//在数据库保存照片的访问路径,数据库懒得建,就没写。
// 打印程序的 IP 地址、端口号和照片路径
//这里获取ip地址和端口号有高级写法,自己搜。但是我这么写也没毛病。
//这要写你的云服务器的ip
String ip = "127.0.0.1";
//你程序的端口号
String port = "8080";
String photoUrl = "http://" + ip + ":" + port + "/image/" + file.getName();
System.out.println(photoUrl);

return file.getAbsolutePath();
}
}
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/f7ashion/article/details/137058218

标签:java,String,image,file,multipartFile,上传,resources,图片
From: https://www.cnblogs.com/liuguiqing/p/18367164

相关文章

  • 上传图片js
    <html><body><scriptsrc="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>functionchangImg(e){for(vari=0;i<e.target.files.length;i++){......
  • java操作milvus
    引入依赖<dependency><groupId>io.milvus</groupId><artifactId>milvus-sdk-java</artifactId><version>2.4.1</version></dependency>配置milvus客户端importio.milvus.client.MilvusServiceClient;importio......
  • java 入门教程(非常详细!1.6w+ 文字)
    先序:学习编程语言要先学个轮廓,刚开始只用学核心的部分,一些细节、不常用的内容先放着,现用现查即可;把常用的东西弄熟练了在慢慢补充。1.Java概述Java是一种面向对象的编程语言,由SunMicrosystems(现在的Oracle)在1995年推出。Java程序可以在任何支持Java虚拟机(JVM)的......
  • Java基础语法笔记
    Java基础语法1.注释,标识符,关键字注释linecomment://blockcomment:/**/javadoc:/***/标识符、关键字数据类型 ......
  • Java轻松实现跨平台(Windows、Linux)多协议(Twain、Sane)的Web扫描
     由于项目需要,开发在Windows下与Linux下扫描功能,Linux主要是信创的两个系统(UOS、麒麟),研究了一下发现,Windows使用Twain协议与扫描仪通讯,Linux使用的是Sane协议与扫描仪通讯,找到Twain协议和Sane协议的标准文档,英文的,都有大几百页,项目一个月内要求上线,明显没时间慢慢研究,于......
  • Winform(Devexpress)中实现GridView(GridControl)没有数据时,表格显示图片
    1.问题描述:在GridView中当数据源为空或者没有数据时,Grid表格下的画布显示图片;当然要使用到GridView事件:事件是:CustomDrawEmptyForeground代码如下:privatevoid_GridView_CustomDrawEmptyForeground(objectsender,CustomDrawEventArgse){if(_......
  • 【数据库指定主题文档上传激励活动】进行中,快来上传文档赢取奖励!
    墨天轮社区的文档版块一直致力于为用户提供具有价值的技术资源与实操干货,当前已收录了众多优质的技术资源,尤其是数据库技术干货。经前期调研发现,当前众多用户对数据库巡检、国产化适配、性能优化等主题实操文档的需求甚高。为让不同背景的数据库从业者能够相互学习和交流经验,墨天......
  • 【JavaSec】类的动态加载初探
    0x02类的动态加载文章目录0x02类的动态加载什么是类加载?动态类加载方法:类加载:继承关系:调用关系:下面尝试使用URLClassLoader进行尝试http协议:jar协议:http读取方法:file读取方法:使用defineClass类加载方法Unsafe类加载什么是类加载?即虚拟机加载.class文件在......
  • Java实现:如何通过调度任务搜索附近代驾司机
    文章目录任务需求代码实现代码解读1.任务查询和校验2.订单状态检查3.搜索附近的司机4.推送订单信息结论在现代的出行服务中,代驾服务越来越普及。为了确保用户能够快速找到附近的代驾司机,自动化调度系统显得尤为重要。今天,我将分享一个Java实现的调度任务,旨在根......
  • JAVA毕业设计|(免费)springboot基于spring boot的校园商铺管理系统包含文档代码讲解
    收藏点赞不迷路 关注作者有好处编号:springboot188springboot基于springboot的校园商铺管理系统开发语言:Java数据库:MySQL技术:Spring+SpringMVC+MyBatis+Vue+html工具:IDEA/Ecilpse、Navicat、Maven1.系统展示2.万字文档展示第5章系统详细设计系统实现这个章节的......