java-springboot实现图片的上传

我们在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下的imageString 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下的imageString 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\pictureString userDir = System.getProperty("user.dir");//保存图片的路径,我们存放在resources下static下的imageString value = userDir + "\\src\\main\\resources\\static\\image\\";
      //这要写你的云服务器的ipString 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\pictureString userDir = System.getProperty("user.dir");//保存图片的路径,我们存放在resources下static下的imageString 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地址和端口号有高级写法,自己搜。但是我这么写也没毛病。//这要写你的云服务器的ipString ip = "127.0.0.1";//你程序的端口号String port = "8080";String photoUrl = "http://" + ip + ":" + port + "/image/" + file.getName();System.out.println(photoUrl);return file.getAbsolutePath();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/570811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spark—GraphX实战 OneID

OneID 前面我们学习了ID Mapping,包括ID Mapping 的背景介绍和业务场景,以及如何使用Spark 实现ID Mapping,这个过程中涉及到了很多东西,当然我们都通过文章的形式介绍给大家了,所以你再学习今天这一节之前&#xff0…

canvas跟随鼠标画有透明度的矩形边框

提示&#xff1a;canvas跟随鼠标画有透明度的矩形边框 文章目录 前言一、跟随鼠标画有透明度的矩形边框总结 前言 一、跟随鼠标画有透明度的矩形边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

【No.20】蓝桥杯简单数论下|寻找整数|素数的判断|笨小猴|最大最小公倍数|素数筛|埃氏筛|欧氏线性筛|质数|分解质因子(C++)

寻找整数 【题目描述】 有一个不超过 1 0 1 7 10^17 1017的正整数n&#xff0c;知道这个数除以2至49后的余数如下表所示&#xff0c;求这个正整数最小是多少 解法一&#xff1a;模拟 暴力法&#xff1a;一个个检验 1 … 1 0 17 1\dots 10^{17} 1…1017的每个数 由于这个数n…

Wireshark 抓包

启动时选择一个有信号的网卡双击打开&#xff0c;或者在 捕获选择里打开选择网卡。 然后输出下面的规则就可以抓到报文了。 最上面的三条是建立连接时的三次握手&#xff0c; 下面是发送数据hello 对应两条数据 最下面的4条是断时的4次挥手

提升政府网站效率与安全性——引荐爱校对巡检系统建议书

致各相关单位&#xff1a; 主题&#xff1a;关于提升政府网站管理效率与安全性的建议书——引入爱校对网站巡检系统 在数字化浪潮的推动下&#xff0c;政府网站已成为政府与公众沟通的重要桥梁。确保网站信息的准确性、及时性和安全性&#xff0c;对于建立公众信任、提供高效服…

Spring(详细介绍)

目录 一、简介 1、什么是Spring&#xff1f; 2、Spring框架的核心特性 3、优点 二、IOC容器 介绍 1、获取资源的传统方式 2、控制反转方式获取资源 3、DI 4、IOC容器在Spring中的实现 入门案例 1、创建Maven Module 2、引入依赖 3、创建HelloWorld类 4、在Spring的配…

2024年福建事业单位招聘详细流程

2024年福建事业单位招聘详细流程&#xff0c;速速查收&#xff01;

TransformControls 是 Three.js 中的一个类,用于在网页中进行 3D 场景中物体的交互式操作。

demo案例 TransformControls 是 Three.js 中的一个类&#xff0c;用于在网页中进行 3D 场景中物体的交互式操作。让我们来详细讲解它的输入参数、输出、属性和方法&#xff1a; 输入参数&#xff1a; TransformControls 构造函数通常接受两个参数&#xff1a; camera&#…

app自动化-Appium学习笔记

使用Appium&#xff0c;优点&#xff1a; 1、支持语言比较多&#xff0c;例如&#xff1a;Java、Python、Javascript、PHP、C#等语言 2、支持跨应用&#xff08;windows、mac、linux&#xff09; 3、适用平台Android、iOS 4、支持Native App(原生app)、Web App、Hybird App…

路径规划——搜索算法详解(二):Floyd算法详解与MATLAB代码

上次总结了Dijkstra算法的案例原理与代码&#xff0c;本文分享第二种比较基础且易懂的方法为Floyd算法&#xff0c;该算法可以有效正确地处理有向图的最短路径问题&#xff0c;与Dijkstra算法不同&#xff0c;Floyd算法是一种动态规划算法&#xff0c;对于稠密图效果显著。原理…

gitee多用户配置

一、引言 在工作的时候我们有时候会自己创建项目Demo来实现一些功能&#xff0c;但是又不想把自己的Demo代码放到公司的仓库代码平台&#xff08;gitee&#xff09;中管理&#xff0c;于是就是想自己放到自己的Gitee中管理&#xff0c;于是就需要配置Git多用户。 本文将配置分别…

FPGA之状态机学习

作为一名逻辑工程师&#xff0c;掌握和应用状态机设计是必不可少的。能够灵活的应用状态机是对逻辑工程师最基本的要求&#xff0c;状态机设计的好坏能够直接影响到设计系统的稳定性&#xff0c;所以学会状态机是非常的重要。 1.状态机的概念 状态机通过不同的状态迁移来完成特…