欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot實(shí)現(xiàn)圖片上傳和下載功能

 更新時(shí)間:2018年02月28日 12:43:49   作者:修煉中的菜鳥  
這篇文章主要為大家詳細(xì)介紹了spring boot實(shí)現(xiàn)圖片上傳和下載功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

 這篇博客簡單介紹下spring boot下圖片上傳和下載,已經(jīng)遇到的問題。首先需要?jiǎng)?chuàng)建一個(gè)spring boot項(xiàng)目。

1、核心的controller代碼

package com.qwrt.station.websocket.controller; 
 
import com.alibaba.fastjson.JSONObject; 
import com.qwrt.station.common.util.JsonUtil; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Value; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.multipart.MultipartFile; 
 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import java.io.*; 
 
/** 
 * Created by jack on 2017/10/30. 
 */ 
@RestController 
@RequestMapping("v1/uploadDownload") 
public class UploadDownloadController { 
 private static final Logger logger = LoggerFactory.getLogger(UploadDownloadController.class); 
 @Value("${uploadDir}") 
 private String uploadDir; 
 
 @RequestMapping(value = "/uploadImage", method = RequestMethod.POST) 
 public JSONObject uploadImage(@RequestParam(value = "file") MultipartFile file) throws RuntimeException { 
 if (file.isEmpty()) { 
  return JsonUtil.getFailJsonObject("文件不能為空"); 
 } 
 // 獲取文件名 
 String fileName = file.getOriginalFilename(); 
 logger.info("上傳的文件名為:" + fileName); 
 // 獲取文件的后綴名 
 String suffixName = fileName.substring(fileName.lastIndexOf(".")); 
 logger.info("上傳的后綴名為:" + suffixName); 
 // 文件上傳后的路徑 
 String filePath = uploadDir; 
 // 解決中文問題,liunx下中文路徑,圖片顯示問題 
 // fileName = UUID.randomUUID() + suffixName; 
 File dest = new File(filePath + fileName); 
 // 檢測(cè)是否存在目錄 
 if (!dest.getParentFile().exists()) { 
  dest.getParentFile().mkdirs(); 
 } 
 try { 
  file.transferTo(dest); 
  logger.info("上傳成功后的文件路徑未:" + filePath + fileName); 
  return JsonUtil.getSuccessJsonObject(fileName); 
 } catch (IllegalStateException e) { 
  e.printStackTrace(); 
 } catch (IOException e) { 
  e.printStackTrace(); 
 } 
 return JsonUtil.getFailJsonObject("文件上傳失敗"); 
 } 
 
 //文件下載相關(guān)代碼 
 @RequestMapping(value = "/downloadImage",method = RequestMethod.GET) 
 public String downloadImage(String imageName,HttpServletRequest request, HttpServletResponse response) { 
 //String fileName = "123.JPG"; 
 logger.debug("the imageName is : "+imageName); 
 String fileUrl = uploadDir+imageName; 
 if (fileUrl != null) { 
  //當(dāng)前是從該工程的WEB-INF//File//下獲取文件(該目錄可以在下面一行代碼配置)然后下載到C:\\users\\downloads即本機(jī)的默認(rèn)下載的目錄 
  /* String realPath = request.getServletContext().getRealPath( 
   "http://WEB-INF//");*/ 
  /*File file = new File(realPath, fileName);*/ 
  File file = new File(fileUrl); 
  if (file.exists()) { 
  response.setContentType("application/force-download");// 設(shè)置強(qiáng)制下載不打開 
  response.addHeader("Content-Disposition", 
   "attachment;fileName=" + imageName);// 設(shè)置文件名 
  byte[] buffer = new byte[1024]; 
  FileInputStream fis = null; 
  BufferedInputStream bis = null; 
  try { 
   fis = new FileInputStream(file); 
   bis = new BufferedInputStream(fis); 
   OutputStream os = response.getOutputStream(); 
   int i = bis.read(buffer); 
   while (i != -1) { 
   os.write(buffer, 0, i); 
   i = bis.read(buffer); 
   } 
   System.out.println("success"); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } finally { 
   if (bis != null) { 
   try { 
    bis.close(); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
   } 
   if (fis != null) { 
   try { 
    fis.close(); 
   } catch (IOException e) { 
    e.printStackTrace(); 
   } 
   } 
  } 
  } 
 } 
 return null; 
 } 
 
 
} 

     上面的代碼有兩個(gè)方法,上面的方法是圖片上傳的方法,下面的方法是圖片下載的方法。下載圖片需要傳入圖片的文件名,在ios,android手機(jī),谷歌瀏覽器測(cè)試,上傳下載沒有問題。

2、測(cè)試的html的核心代碼如下,進(jìn)行圖片的上傳和下載:

<!DOCTYPE html> 
<html> 
 
 <head> 
 <meta charset="UTF-8" /> 
 <title>websocket chat</title> 
 </head> 
 
 <body> 
 
 <div> 
  <label>輸入信息:</label><input id="id" width="100px" /><br /> 
  <button id="btn">發(fā)送消息</button> 
  <button id="connection">websocket連接</button> 
  <button id="disconnection">斷開websocket連接</button> 
  <br /><br /> 
  <form enctype="multipart/form-data" id="uploadForm"> 
  <input type="file" name="uploadFile" id="upload_file" style="margin-bottom:10px;"> 
  <input type="button" id="uploadPicButton" value="上傳" onclick="uploadImage()"> 
  </form> 
  <!--<input type="file" onchange="uploadImgTest();" id="uploadImg" name="uploadImg" /> 
  <button id="uploadImage" onclick="uploadImage();">上傳</button>--> 
 </div> 
  
  
 <div id="test"> 
 
 </div> 
  
 <hr color="blanchedalmond"/> 
 <div id="voiceDiv"> 
  
 </div> 
  
 <hr color="chartreuse" /> 
 <div id="imgDiv" style="width: 30%;height: 30%;"> 
  <img src="http://192.168.9.123:8860/v1/uploadDownload/downloadImage?imageName=123.JPG" style="width: 160px;height: 160px;"/> 
 </div> 
  
</body> 
 
 <script src="js/jquery-3.2.1.min.js"></script> 
 <!--<script th:src="@{stomp.min.js}"></script>--> 
 <script src="js/sockjs.min.js"></script> 
 
 <script> 
 var websocketUrl = "ws://192.168.9.123:8860/webSocketServer"; 
 var websocket; 
 if('WebSocket' in window) { 
  //websocket = new WebSocket("ws://" + document.location.host + "/webSocketServer"); 
  //websocket = new WebSocket("ws://192.168.9.123:9092/webSocketServer"); 
  //websocket = new WebSocket("ws://localhost:8860/webSocketServer"); 
  websocket = new WebSocket(websocketUrl); 
 } else if('MozWebSocket' in window) { 
  websocket = new MozWebSocket("ws://" + document.location.host + "/webSocketServer"); 
 } else { 
  websocket = new SockJS("http://" + document.location.host + "/sockjs/webSocketServer"); 
 } 
 websocket.onopen = function(evnt) { 
  console.log("onopen----", evnt.data); 
 }; 
 websocket.onmessage = function(evnt) { 
  //$("#test").html("(<font color='red'>" + evnt.data + "</font>)"); 
  console.log("onmessage----", evnt.data); 
  //$("#test").html(evnt.data); 
  $("#test").append('<div>' + event.data + '</div>'); 
 }; 
 websocket.onerror = function(evnt) { 
  console.log("onerror----", evnt.data); 
 } 
 websocket.onclose = function(evnt) { 
  console.log("onclose----", evnt.data); 
 } 
 $('#btn').on('click', function() { 
  if(websocket.readyState == websocket.OPEN) { 
  var msg = $('#id').val(); 
  //調(diào)用后臺(tái)handleTextMessage方法 
  websocket.send(msg); 
  } else { 
  alert("連接失敗!"); 
  } 
 }); 
 $('#disconnection').on('click', function() { 
  if(websocket.readyState == websocket.OPEN) { 
  websocket.close(); 
  //websocket.onclose(); 
  console.log("關(guān)閉websocket連接成功"); 
  } 
 }); 
 $('#connection').on('click', function() { 
  if(websocket.readyState == websocket.CLOSED) { 
  websocket.open(); 
  //websocket.onclose(); 
  console.log("打開websocket連接成功"); 
  } 
 }); 
 //監(jiān)聽窗口關(guān)閉事件,當(dāng)窗口關(guān)閉時(shí),主動(dòng)去關(guān)閉websocket連接,防止連接還沒斷開就關(guān)閉窗口,server端會(huì)拋異常。 
 window.onbeforeunload = function() { 
  websocket.close(); 
 } 
 
 function uploadImgTest() { 
  
 
 } 
  
 function uploadImage(){ 
  //var uploadUrl = "http://localhost:8860/v1/uploadDownload/uploadImage"; 
 var uploadUrl = "http://192.168.9.123:8860/v1/uploadDownload/uploadImage"; 
 var downUrl = "http://192.168.9.123:8860/v1/uploadDownload/downloadImage" 
 var pic = $('#upload_file')[0].files[0]; 
 var fd = new FormData(); 
 //fd.append('uploadFile', pic); 
 fd.append('file', pic); 
 $.ajax({ 
  url:uploadUrl, 
  type:"post", 
  // Form數(shù)據(jù) 
  data: fd, 
  cache: false, 
  contentType: false, 
  processData: false, 
  success:function(data){ 
  console.log("the data is : {}",data); 
  if(data.code == 0){ 
   console.log("上傳成功后的文件路徑為:"+data.data); 
   var img = $("<img />") 
   img.attr("src",downUrl+"?imageName="+data.data); 
   img.width("160px"); 
   img.height("160px"); 
   $("#imgDiv").append(img); 
  } 
   
  } 
 }); 
  
 } 
  
 </script> 
 
</html> 

上面的代碼有些和圖片的上傳和下載沒有關(guān)系,根據(jù)需要自己去掉,看圖片上傳和下載的核心代碼,需要引入jquery。

3、spring boot的屬性配置:

1.解決圖片上傳太大的問題:

spring:
 http:
 multipart:
 max-file-size: 100Mb #文件上傳大小
 max-request-size: 200Mb #最打請(qǐng)求大小

這是新版spring boot解決圖片或者文件上傳太大的問題,老板的不是這樣解決的??梢宰约翰橘Y料

2.配置文件上傳保存的位置:

#上傳位置
uploadDir: F:\mystudy\pic\

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

元宵節(jié)福利:

相關(guān)文章

  • MyBatis select標(biāo)簽的使用示例

    MyBatis select標(biāo)簽的使用示例

    MyBatis中,select 標(biāo)簽是最常用也是功能最強(qiáng)大的 SQL 語言,用于執(zhí)行查詢操作,本文就來介紹了MyBatis select標(biāo)簽的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • Java的SPI機(jī)制實(shí)例詳解

    Java的SPI機(jī)制實(shí)例詳解

    這篇文章主要介紹了Java的SPI機(jī)制實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java實(shí)現(xiàn)FTP上傳與下載功能

    Java實(shí)現(xiàn)FTP上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)FTP上傳與下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • java?Spring?Boot的介紹與初體驗(yàn)

    java?Spring?Boot的介紹與初體驗(yàn)

    大家好,本篇文章主要講的是java?Spring?Boot的介紹與初體驗(yàn),感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java匿名類和匿名函數(shù)的概念和寫法

    Java匿名類和匿名函數(shù)的概念和寫法

    匿名函數(shù)寫法和匿名類寫法的前提必須基于函數(shù)式接口匿名函數(shù)寫法和匿名類寫法其本質(zhì)是同一個(gè)東西,只是簡化寫法不同使用Lambda表達(dá)式簡寫匿名函數(shù)時(shí),可以同時(shí)省略實(shí)現(xiàn)類名、函數(shù)名,這篇文章主要介紹了Java匿名類和匿名函數(shù)的概念和寫法,需要的朋友可以參考下
    2023-06-06
  • Springboot之idea之pom文件圖標(biāo)不對(duì)問題

    Springboot之idea之pom文件圖標(biāo)不對(duì)問題

    這篇文章主要介紹了Springboot之idea之pom文件圖標(biāo)不對(duì)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • SpringBoot項(xiàng)目如何將Bean注入到普通類中

    SpringBoot項(xiàng)目如何將Bean注入到普通類中

    這篇文章主要介紹了SpringBoot項(xiàng)目如何將Bean注入到普通類中,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringCloud客戶端報(bào)錯(cuò):- was unable to send heartbeat!的解決

    SpringCloud客戶端報(bào)錯(cuò):- was unable to send&nb

    這篇文章主要介紹了SpringCloud客戶端報(bào)錯(cuò):- was unable to send heartbeat!的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析

    Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析

    這篇文章主要介紹了Java集合之Set、HashSet、LinkedHashSet和TreeSet深度解析,List是有序集合的根接口,Set是無序集合的根接口,無序也就意味著元素不重復(fù),更嚴(yán)格地說,Set集合不包含一對(duì)元素e1和e2 ,使得e1.equals(e2) ,并且最多一個(gè)空元素,需要的朋友可以參考下
    2023-09-09
  • Java基礎(chǔ)之Math和Random類知識(shí)總結(jié)

    Java基礎(chǔ)之Math和Random類知識(shí)總結(jié)

    今天帶大家來學(xué)習(xí)java的Math和Random類,文中有非常詳細(xì)的代碼示例及介紹,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05

最新評(píng)論