이 블로그는 Spring Boot에서 사진을 업로드하고 다운로드 할 때 발생하는 문제를 간단히 소개합니다. 먼저 스프링 부팅 프로젝트를 만들어야합니다.
1. 핵심 컨트롤러 코드
package com.qwrt.station.websocket.controller; com.alibaba.fastjson.jsonobject import; import com.qwrt.station.common.util.jsonutil; import org.slf4j.logger; org.slf4j.loggerfactory; org.springframework.beans.factory.annotation.value import; org.springframework.web.bind.annotation.requestmapping; org.springframework.web.bind.annotation.requestmethod; org.springframework.web.bind.annotation.requestparam; org.springframework.web.bind.annotation.RestController; org.springframework.web.multipart.multipartfile; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; java.io.*; /*** 2017/10/30에 Jack에 의해 만들어졌습니다. */ @RestController @requestmapping ( "v1/ uploaddownload") public class UploadDownloadController {private static final logger = loggerfactory.getLogger (uploadDownloadController.class); @Value ( "$ {uploadDir}") private String uploadDir; @requestmapping (value = "/uploadimage", method = requestmethod.post) public jsonobject uploadImage (@requestparam (value = "file") multipartfile 파일) runtimeexception {if (file.isempty ()) {return jsonutil.getfailjsonobject (파일이 비어 있지 않음 "); } // 파일 이름 문자열 filename = file.getoriginalFilename (); logger.info ( "업로드 된 파일 이름은" + filename); // 파일을 가져옵니다 expixName = filename.substring (filename.lastIndexof ( ".")); logger.info ( "업로드 된 접미사 이름은" + windixname); // 파일 업로드 다음 경로 문자열 filepath = uploaddir; // 중국 문제 해결, liunx 아래의 중국 경로, 그림 표시 문제 // filename = uuid.randomuuid () + windixname; file dest = 새 파일 (filepath + filename); // (! dest.getParentFile (). Exists ()) {dest.getParentFile (). mkdirs (); } try {file.transferto (dest); logger.info ( "업로드 후 파일 경로는 다음과 같습니다." + filepath + filename); return jsonutil.getsuccessjsonobject (filename); } catch (delegalstateException e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } return JsonUtil.getFailJsonObject ( "파일 업로드 실패"); } // 파일 다운로드 관련 코드 @RequestMapping (value = "/downloadImage", method = requestMethod.get) public String downloadImage (String imageName, httpservletrequest request, httpservletResponse 응답) {// string filename = "123.jpg"; logger.debug ( "ImageName은 :"+imageName); 문자열 fileUrl = uploaddir+imageName; if (fileUrl! = null) {// 현재 파일은 프로젝트의 Web-inf // 파일에서 얻어집니다 (이 디렉토리는 다음 코드 줄에서 구성 할 수 있음) 및 c : // users // 다운로드로 다운로드 할 수 있습니다. file (realPath, filename);*/ file file = 새 파일 (fileUrl); if (file.exists ()) {response.setContentType ( "Application/ForceDownload"); // 강제 다운로드를 response.addheader ( "content-disposition", "attachment; filename =" + imageName)로 설정합니다. // 파일 이름을 byte [] buffer = newte [1024]; fileInputStream fis = null; bufferedInputStream bis = null; try {fis = new FileInputStream (파일); BIS = 새로운 BufferedInputStream (FIS); outputStream os = response.getOutputStream (); int i = bis.read (버퍼); while (i! = -1) {os.write (버퍼, 0, i); i = bis.read (버퍼); } system.out.println ( "성공"); } catch (예외 e) {e.printstacktrace (); } 마침내 {if (bis! = null) {try {bis.close (); } catch (ioexception e) {e.printstacktrace (); }} if (fis! = null) {try {fis.close (); } catch (ioexception e) {e.printstacktrace (); }}}}} return null; }}}}위 코드에는 두 가지 방법이 있습니다. 위의 방법은 이미지를 업로드하는 방법이며 다음 방법은 이미지를 다운로드하는 방법입니다. 이미지를 다운로드하려면 이미지의 파일 이름을 전달해야합니다. iOS, Android Phone, Google Chrome에서 테스트하면 업로드 및 다운로드에 문제가 없습니다.
2. 테스트 된 HTML의 핵심 코드는 그림과 같습니다.
<! docType html> <html> <head> <meta charset = "utf-8"/> <title> WebSocket Chat </title> </head> <body> <div> <label> 입력 정보 : </label> <입력 ID = "id"/> <br/> <button id = "btn"> in connection> <button id ""> websetic> < id = "Disternection"> Disternection < /button> <br /> <br /> <form enctype = "multipart /form-data"id = "upload form"> <input type = "file"name = "uploadfile"id = "upload_file"style = "value" "value" onclick = "uploadImage ()"> </form> <!-<input type = "file"onchange = "uploadimgtest ();" id = "uploadimg"name = "uploadimg"/> <button id = "uploadimage"onclick = "uploadimage ();"> upload </upload>-> </div> <div id = "test"> </div> <hr color = "blanchedalmond"/> <div id = "VoIdediv"> <Hr color = "chartreuse"/> <im id = "" ". <img src = "http://192.168.9.9.123:8860/v1/uploaddownload/downloadimage?imagename=123.jpg"/> </div> </body> <script src = "js/jquery-3.2.1.min.js"> </script> Th : src = "@{stomp.min.js}"> </script>-> <script src = "js/sockjs.min.js"> </script> <cript> var webSocketUrl = "ws : //192.168.9.123 : 8860/webSocketServer"; var websocket; if (Window에서 'WebSocket') {// 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 = 새로운 WebSocket (WebSocketUrl); } else if (Window의 'mozwebsocket') {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(`````fled '> " + 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'). $ ( '#disternection'). on ( 'click', function () {if (websocket.readystate == websocket.open) {websocket.close (); //websocket.onclose (); console.log ( "WebSocket Connection을 성공적으로 닫습니다");}}; $ ( '#connection'). on ( 'click', function () {if (websocket.readystate == websocket.closed) {websocket.open (); //websocket.onclose (); console.log ( "WebSocket Connection 열기";}}); // 창 닫기 이벤트를 듣습니다. 창이 닫히면 연결이 끊어지기 전에 창이 닫히는 것을 방지하기 위해 WebSocket 연결을 적극적으로 닫으면 서버 측에 예외가 발생합니다. 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 downloadUrl = "http://192.168.9.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", // 데이터 데이터 데이터 양식 : fd, cache : false, contenttype : false, processData : false, success : function (data) {console.log ( "데이터는 : {}", data); if (data.code == 0) {var img); "<img />") img.attr (downurl+"? imag.width ("160px "); } </script> </html>위의 코드 중 일부는 사진 업로드 및 다운로드와 관련이 없습니다. 필요에 따라 직접 제거하고 사진 업로드 및 다운로드를위한 핵심 코드를 살펴보십시오. jQuery를 도입해야합니다.
3. 스프링 부트 속성 구성 :
1. 너무 큰 그림 업로드의 문제를 해결하십시오.
스프링 : HTTP : 멀티 파트 : 최대 파일 크기 : 100MB #File 업로드 크기 최대 퀘스트 크기 : 200MB #maximum 요청 크기
이것은 너무 큰 사진이나 파일의 업로드 문제를 해결하기 위해 Spring Boot의 새로운 버전입니다. 이것은 보스가 그것을 해결 한 방식이 아닙니다. 정보를 직접 확인할 수 있습니다
2. 구성 파일이 업로드 및 저장된 위치 :
#uploaddir : f :/mystudy/pic/
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.
랜턴 페스티벌 복지 :