Spring Boot 實(shí)現(xiàn)圖片上傳并回顯功能
一、常規(guī)形式
1 項(xiàng)目結(jié)構(gòu)

2 配置文件及環(huán)境設(shè)置
(1)配置文件
# 應(yīng)用服務(wù) WEB 訪問(wèn)端口 server.port=8080 # spring 靜態(tài)資源掃描路徑 spring.resources.static-locations=classpath:/static/ # 訪問(wèn)template下的html文件需要配置模板 spring.thymeleaf.prefix.classpath=classpath:/templates/ # 是否啟用緩存 spring.thymeleaf.cache=false # 模板文件后綴 spring.thymeleaf.suffix=.html # 模板文件編碼 spring.thymeleaf.encoding=UTF-8 #上傳的絕對(duì)路徑 file.upload.path=G://images/ #最關(guān)鍵# #絕對(duì)路徑下的相對(duì)路徑 file.upload.path.relative=/images/** #最關(guān)鍵# #設(shè)置文件最大值 spring.servlet.multipart.max-file-size=5MB
在相關(guān)路徑新建文件夾
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-lxFge7I3-1625452749715)(C:\Users\17122\AppData\Roaming\Typora\typora-user-images\image-20201106192605478.png)]](http://img.jbzj.com/file_images/article/202107/2021070517161887.png)
3 代碼
(1)pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
(2)index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="../upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="image/*">
<br>
<input type="text" value="">
<input type="submit" value="上傳" class="btn btn-success">
</form>
[[${filename}]]
<br>
<img th:src="@{${filename}}" alt="圖片">
</body>
</html>
(3)TestController.java
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
@Controller
public class TestController {
/**
* 上傳地址
*/
@Value("${file.upload.path}")
private String filePath;
// 跳轉(zhuǎn)上傳頁(yè)面
@RequestMapping("test")
public String test() {
return "Page";
}
// 執(zhí)行上傳
@RequestMapping("upload")
public String upload(@RequestParam("file") MultipartFile file, Model model) {
// 獲取上傳文件名
String filename = file.getOriginalFilename();
// 定義上傳文件保存路徑
String path = filePath + "rotPhoto/";
// 新建文件
File filepath = new File(path, filename);
// 判斷路徑是否存在,如果不存在就創(chuàng)建一個(gè)
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
try {
// 寫(xiě)入文件
file.transferTo(new File(path + File.separator + filename));
} catch (IOException e) {
e.printStackTrace();
}
// 將src路徑發(fā)送至html頁(yè)面
model.addAttribute("filename", "/images/rotPhoto/" + filename);
return "index";
}
}
(4)MyWebAppConfigurer
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 資源映射路徑
*/
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
/**
* 上傳地址
*/
@Value("${file.upload.path}")
private String filePath;
/**
* 顯示相對(duì)地址
*/
@Value("${file.upload.path.relative}")
private String fileRelativePath;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler(fileRelativePath).
addResourceLocations("file:/" + filePath);
}
}
4 測(cè)試
![[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-HU02Yilv-1625452749717)(C:\Users\17122\AppData\Roaming\Typora\typora-user-images\image-20201106200633411.png)]](http://img.jbzj.com/file_images/article/202107/2021070517161888.jpg)
二、增加異步操作
1 前端ajax
<div class="modal-body">
<form method="post" enctype="multipart/form-data">
<input type="file" name="file" id="img">
<input type="button" value="上傳" class="btn btn-outline-primary" onclick="uploadFile()"
style="width: 30%;">
</form>
</div>
<script>
//上傳文件
function uploadFile() {
//formData里面存儲(chǔ)的數(shù)據(jù)形式,一對(duì)key/value組成一條數(shù)據(jù),key是唯一的,一個(gè)key可能對(duì)應(yīng)多個(gè)value
var myform = new FormData();
// 此時(shí)可以調(diào)用append()方法來(lái)添加數(shù)據(jù)
myform.append('file', $("#img")[0].files[0]);
//驗(yàn)證不為空
var file = $("#img")[0].files[0];
if (file == null) {
alert("請(qǐng)選擇文件");
return false;
} else {
$.ajax({
url: "/user/upLoad",
type: "POST",
data: myform,
async: false,
contentType: false,
processData: false,
success: function (result) {
console.log(result);
alert("上傳成功!");
$("#div_show_img").html("<img id='input_img' src='" + result + "'>");
$("#imgPath").attr("value", result);
$("#div_upload").removeClass("show");
},
error: function (data) {
alert("系統(tǒng)錯(cuò)誤");
}
});
}
}
</script>
2 后端Controller
@ResponseBody
@RequestMapping("/upLoad")
public String upLoadImage(@RequestParam("file") MultipartFile file) {
// 獲取上傳文件名
String filename = file.getOriginalFilename();
String suffixName = filename.substring(filename.lastIndexOf("."));
// 定義上傳文件保存路徑
String path = filePath + "images/";
//生成新的文件名稱
String newImgName = UUID.randomUUID().toString() + suffixName;
// 新建文件
File filepath = new File(path, newImgName);
// 判斷路徑是否存在,如果不存在就創(chuàng)建一個(gè)
if (!filepath.getParentFile().exists()) {
filepath.getParentFile().mkdirs();
}
try {
// 寫(xiě)入文件
file.transferTo(new File(path + File.separator + newImgName));
} catch (IOException e) {
e.printStackTrace();
}
return "/images/images/" + newImgName;
}
到此這篇關(guān)于Spring Boot 實(shí)現(xiàn)圖片上傳并回顯功能的文章就介紹到這了,更多相關(guān)Spring Boot上傳圖片回顯內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)簡(jiǎn)單的猜數(shù)字小游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-03-03
使用Java讀取Excel文件數(shù)據(jù)的方法詳解
通過(guò)編程方式讀取Excel數(shù)據(jù)能實(shí)現(xiàn)數(shù)據(jù)導(dǎo)入、批量處理、數(shù)據(jù)比對(duì)和更新等任務(wù)的自動(dòng)化,本文為大家介紹了三種Java讀取Excel文件數(shù)據(jù)的方法,需要的可以參考下2024-01-01
詳解Java線程池隊(duì)列中的延遲隊(duì)列DelayQueue
這篇文章主要為大家詳細(xì)介紹了Java線程池隊(duì)列中的延遲隊(duì)列DelayQueue的相關(guān)資料,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-12-12
SpringBoot整合Redis及Redis工具類撰寫(xiě)實(shí)例
這篇文章主要介紹了SpringBoot整合Redis及Redis工具類撰寫(xiě)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
關(guān)于Java中常見(jiàn)的負(fù)載均衡算法
這篇文章主要介紹了關(guān)于Java中常見(jiàn)的負(fù)載均衡算法,負(fù)載平衡是一種電子計(jì)算機(jī)技術(shù),用來(lái)在多個(gè)計(jì)算機(jī)、網(wǎng)絡(luò)連接、CPU、磁盤(pán)驅(qū)動(dòng)器或其他資源中分配負(fù)載,以達(dá)到優(yōu)化資源使用、最大化吞吐率、最小化響應(yīng)時(shí)間、同時(shí)避免過(guò)載的目的,需要的朋友可以參考下2023-08-08
從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制
這篇文章主要介紹了從JVM的內(nèi)存管理角度分析Java的GC垃圾回收機(jī)制,帶有GC是Java語(yǔ)言的重要特性之一,需要的朋友可以參考下2015-11-11
Java 8 動(dòng)態(tài)類型語(yǔ)言Lambda表達(dá)式實(shí)現(xiàn)原理解析
Java 8支持動(dòng)態(tài)語(yǔ)言,看到了很酷的Lambda表達(dá)式,對(duì)一直以靜態(tài)類型語(yǔ)言自居的Java,讓人看到了Java虛擬機(jī)可以支持動(dòng)態(tài)語(yǔ)言的目標(biāo)。接下來(lái)通過(guò)本文給大家介紹Java 8 動(dòng)態(tài)類型語(yǔ)言Lambda表達(dá)式實(shí)現(xiàn)原理分析,需要的朋友可以參考下2017-02-02

