java spring 上传图片,springboot 上传图片并回显
之前也有做過上傳圖片的功能,不過是用在ssm的項目中,也有很多的不完美。
這次用的springboot,基本上對上傳圖片又有了一定的認識,想再這里記錄一下。/**
* 上傳圖片
*
* @return
*/
@RequestMapping(value = "/uploadImages", method = RequestMethod.POST)
@ResponseBody
public Result uploadImages(@RequestParam(value = "file") MultipartFile file) {
if (file.isEmpty()) return Result.error("文件不存在");
String fileName = file.getOriginalFilename(); // 文件名
String suffixName = fileName.substring(fileName.lastIndexOf(".")); // 后綴名
String filePath = "D://temp//"; // 上傳后的路徑,即本地磁盤
fileName = UUID.randomUUID() + suffixName; // 新文件名
File dest = new File(filePath + fileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
file.transferTo(dest);
} catch (IOException e) {
e.printStackTrace();
}
String filename = "/temp/" + fileName;//本地目錄和生成的文件名拼接,這一段存入數據庫
HashMap imgMap = new HashMap();
imgMap.put("imgUrl",filename);
return Result.success(imgMap);
}
設置資源映射路徑:/**
* 資源映射路徑
*/
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//外部訪問路徑映射到本地磁盤路徑
registry.addResourceHandler("/temp/**").addResourceLocations("file:D:/temp/");
}
}
由于springboot有默認上傳文件大小,故在上傳一些大size的圖片,上傳會失敗,通過更改其默認設置:spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=1000MB
不過springboot版本不同會導致上述語句有些偏差。
到這里上傳圖片已經完成,現在要關心就是回顯了
目前我能做到回顯就是外部訪問圖片了,即開啟項目,使用外部路徑訪問:localhost:8080/項目名/temp/圖片名.jpg
所以我們需要拼接前面的字符串:package com.********;//包名已注釋
import com.********.TImg;//包名已注釋
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
@Component
public class ImgUtils {
@Autowired
Environment environment;
public String getPort(){
return environment.getProperty("local.server.port");
}
public String getHostIp(){
InetAddress localHost = null;
try {
localHost = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
}
String ip = localHost.getHostAddress(); // 返回格式為:xxx.xxx.xxx
return ip;
}
/**
* 獲取真實路徑
* @param list
*/
public void getRealUrl(List list,TImg img){
if(list != null) {
for (TImg item : list) {
if (!StringUtils.isEmpty(item.getImgUrl())) {
item.setRealUrl("http://" + getHostIp() + ":" + getPort() + "/" + "項目名" + item.getImgUrl());
}
}
}
if(img != null){
if(!StringUtils.isEmpty(img.getImgUrl())){
img.setRealUrl("http://" + getHostIp() + ":" + getPort() + "/" + "項目名" + img.getImgUrl());
}
}
}
}
通過這個工具類去獲取本項目所在ip和端口號,并將其與上傳圖片存儲路徑進行拼接。
在做這個功能時也有查閱借鑒他人博客。
期待指正與補充!
補充:springboot打成war包在tomcat上部署,那么定義在springboot配置文件中的端口號會失效,并改為使用tomcat中定義的端口號,所以動態獲取ip和端口號面對外置tomcar會失效。
總結
以上是生活随笔為你收集整理的java spring 上传图片,springboot 上传图片并回显的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何导入matlab数据,p
- 下一篇: java中有几种内部类,Java中的四种