เขียนด้านหน้า
เมื่อพูดถึงการอัปโหลดไฟล์เราต้องพูดคุยเกี่ยวกับตรรกะทางธุรกิจก่อน หากทุกคนสามารถเห็นไฟล์ที่อัปโหลด (เช่นโฆษณาหรือแบนเนอร์ในหน้าแรก) เราจะใส่ภาพในพื้นที่ทรัพยากรคงที่ (ตำแหน่งเดียวกับ CSS และ JS) หากไฟล์ได้รับการป้องกัน (เช่นผู้ใช้สามารถดูรูปภาพที่อัปโหลดด้วยตัวเองเท่านั้น) เราจะจัดเก็บไว้ในตำแหน่งบนเซิร์ฟเวอร์ที่เก็บรูปภาพเป็นพิเศษ
ตัวอย่างนี้แสดงวิธีการอัปโหลดไฟล์ที่เก็บไว้ในสองตำแหน่ง หลังจากอัปโหลดเป็นส่วนขยายจะมีการเพิ่มฟังก์ชั่นของการดูไฟล์ที่อัปโหลดและดาวน์โหลดไฟล์ที่อัปโหลด
การตระเตรียม
กำหนดค่า SpringMVC และนำเข้าแพ็คเกจคอมมอนส์
กำหนดค่าไฟล์อัปโหลดตัวแยกวิเคราะห์ใน mvc-servlet.xml
<!-ไฟล์อัปโหลดตัวแยกวิเคราะห์-> <bean id = "MultiPartResolver"> <property name = "MaxUploadSize" value = "1000000"/> <property name = "defaultEncoding" value = "UTF-8"/> </bean>
เก็บไว้ในพื้นที่ทรัพยากรคงที่
1. สถานที่จัดเก็บ:
เก็บไว้ในโครงการดังนั้นเส้นทางจึงเป็นเส้นทางที่สัมพันธ์กับโครงการ
/{yourproject}/webapp/static/img
2. กำหนดค่าตัวจัดการที่ตอบกลับ
@ControllerPublic คลาส UploadController {@getMapping ("/อัปโหลด") สตริงสาธารณะ uploadHandler () {return "upload"; } @postmapping ("/อัปโหลด/คงที่") โมฆะสาธารณะ writostatic (httpservletrequest คำขอ, redirectattributes redirectattributes, @requestparam ("filename") ไฟล์ multipartfile) {if (! ไฟล์. "คงที่/img/"; // รับชื่อไฟล์ต้นฉบับที่อัปโหลดโดยสตริงผู้ใช้ชื่อ filename = file.getoriginalfilename (); // สร้างไฟล์ไฟล์ใหม่ไฟล์ 1 = ไฟล์ใหม่ (พา ธ ชื่อไฟล์); // เขียนไฟล์ไปยัง file.transferto (file1); Redirectattributes.addflashattribute ("ข้อความ", "อัปโหลดสู่ความสำเร็จแบบคงที่"); กลับ "เปลี่ยนเส้นทาง:/อัปโหลด"; } else {redirectattributes.addflashattribute ("ข้อความ", "อัปโหลดไฟล์ไม่สามารถว่างเปล่า"); กลับ "เปลี่ยนเส้นทาง:/อัปโหลด"; -จัดเก็บบนเซิร์ฟเวอร์
1. ตำแหน่งที่เก็บของตัวอย่างนี้:
เก็บไว้ในตำแหน่งที่แน่นอนบนเซิร์ฟเวอร์ไม่มีส่วนเกี่ยวข้องกับโครงการดังนั้นที่อยู่จึงเป็นเส้นทางที่แน่นอน
/ผู้ใช้/Mac/Desktop/IMGTEMP/เป็นเส้นทางที่แน่นอนไปยังไดเรกทอรี
2. กำหนดค่าตัวจัดการที่ตอบกลับ
... @postmapping ("/อัปโหลด/ดิสก์") สตริงสาธารณะ writetodisk (คำขอ httpservletrequest, @requestparam ("ชื่อไฟล์") ไฟล์ multipartfile, redirectattributes redirectattributes) {if (! ไฟล์. // รับ PATH PATH PATH PATH ของโฟลเดอร์โฟลเดอร์ = "/ผู้ใช้/MAC/DESKTOP/IMGTEMP/"; // สร้างไฟล์ไฟล์ใหม่ไฟล์ 1 = ไฟล์ใหม่ (พา ธ ชื่อไฟล์); // เขียนไฟล์ไฟล์ transferto (file1); -ส่วนขยาย (ดูและดาวน์โหลดไฟล์)
เนื่องจากการตอบกลับคือการส่งไฟล์ในรูปแบบของสตรีมเราจึงจำเป็นต้องตั้งค่าการตอบสนอง Mimie อย่างถูกต้องอย่างถูกต้องโดยเบราว์เซอร์ ประเภท Mimie เริ่มต้นของไฟล์แอปพลิเคชันคือ Application/Octet-Stream หลังจากตั้งค่า MIME เป็นค่านี้เบราว์เซอร์จะไม่ดำเนินการโดยอัตโนมัติหรือขอให้เรียกใช้งานไฟล์ดังกล่าวและจะดาวน์โหลดไฟล์ไปยังพื้นที่ท้องถิ่นโดยตรงในรูปแบบของการรักษาไฟล์แนบ
สำหรับการตีความเพิ่มเติมของ Mimie โปรดตรวจสอบบทความนี้
หากเราต้องการปรับแต่งชื่อของไฟล์ดาวน์โหลดเราจำเป็นต้องตั้งค่าข้อความการแยกเนื้อหา
เนื้อหาส่วนหัวข้อความระบุรูปแบบของการตอบกลับที่จะแสดงไม่ว่าจะเป็นแบบอินไลน์ (เช่นเว็บเพจหรือส่วนหนึ่งของหน้า) หรือดาวน์โหลดและบันทึกไว้ในรูปแบบของไฟล์แนบ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการแยกเนื้อหาโปรดตรวจสอบบทความนี้
...@getMapping ("/ดาวน์โหลด/bydefault") โมฆะสาธารณะ getimgbydefault (@requestparam ชื่อไฟล์สตริง, @requestparam (จำเป็น = false, defaultValue = "") Savename String), httpservletResponse reperence กลับ; } // พา ธ ของพา ธ สตริงการจัดเก็บไฟล์ = "/ผู้ใช้/mac/เดสก์ท็อป/imgtemp/"; // ไฟล์ไฟล์ใหม่ไฟล์ = ไฟล์ใหม่ (พา ธ ชื่อไฟล์); if (! file.exists ()) {response.senderror (404); กลับ; } // หากพารามิเตอร์การร้องขอ savename ไม่ว่างให้ดาวน์โหลดไฟล์ถ้า (! stringUtils.isEmpty (savename)) {// ตั้งค่าการตอบสนองความยาวการตอบกลับ SetContentLength ((int) file.length ()); // ตั้งค่าประเภท MIME ของการตอบสนองต่อ Application/Octet-Stream Response.SetContentType (MediaType.Application_OCTET_STREAM_VALUE); savename = สตริงใหม่ (savename.getBytes ("UTF-8"), "iso8859-1"); // ตั้งค่าการจัดสรรเนื้อหาเป็นไฟล์แนบ; filename = savename response.Setheader (httpheaders.content_disposition, "เอกสารแนบ; filename =/" "+savename+"/""); } // อ่านไฟล์ inputStream คือ = ใหม่ fileInputStream (ไฟล์); OutputStream OS = Response.GetOutputStream (); // ไฟล์เอาต์พุต ioutils.copy (IS, OS); os.flush (); os.close (); is.close ();}นอกจากนี้เรายังสามารถใช้ตัวแปลง ByteArrayhttpMessageConverter ที่มาพร้อมกับ SpringMVC ไปยังไฟล์เอาต์พุตซึ่งใช้อินเตอร์เฟส HTTPMessageConverter ข้อมูลคำขอ MIME ทั้งหมดสามารถอ่านได้และ MIME ของข้อมูลการตอบกลับคือแอปพลิเคชัน/Octet-Stream
...@getMapping ("/ดาวน์โหลด/byconvert") public httpentity <byte []> getimgbyconvert (@requestparam String filename, @requestparam (จำเป็น = false, defaultValue = "") Savename) {if (stringutils.isempty } String path = "/users/mac/desktop/imgtemp/"; ไฟล์ไฟล์ = ไฟล์ใหม่ (พา ธ ชื่อไฟล์); if (! file.exists ()) {ส่งคืน ResponseEntity ใหม่ <> (httpstatus.not_found); } ส่วนหัว httpheaders = httpheaders ใหม่ (); if (! stringutils.isempty (savename)) {headers.setContentType (mediaType.application_octet_stream_value); headers.setContentLength (file.length ()); savename = new Sting (savename.getBytes ("UTF-8"), "iso8859-1"); headers.add (httpheaders.content_disposition, "เอกสารแนบ; filename =/" " + savename +"/""); } else {headers.setContentType (mediaType.image_png); } ส่งคืน httpentity ใหม่ <> (filecopyutils.copytobytearray (ไฟล์), ส่วนหัว);}upload.jsp
<%@ page contentType = "text/html; charset = utf-8" language = "java"%> <%@ taglib คำนำหน้า = "ฟอร์ม" uri = "http://www.springframework.org/tags/Form uri = "http://java.sun.com/jsp/jstl/core" %> <! doctype html> <html> <head> <meta charset = "utf-8"> <meta name = "viewport" เนื้อหา = "ความกว้าง ระดับต่ำสุด = 1.0 "> <meta http-equiv =" x-ua-compatible "content =" ie = edge "> <title> เอกสาร </title> <link rel =" stylesheet "href ="/bootstrap-3.3 scatter </h1> <c: ถ้า test = "$ {ไม่ใช่ข้อความว่างเปล่า}"> <h2> $ {message} </h2> </c: ถ้า> <ฟอร์ม: ฟอร์ม enctype = "multipart/form-data" action = "/upload/static"> <p> อัปโหลดไปยัง/เว็บ name = "uploadfile"> <putton> ส่ง </button> </form: form> <ฟอร์ม: ฟอร์ม enctype = "multipart/form-data" action = "/upload/disk"> <p> อัปโหลดไปยังดิสก์ </p> <label for = "" upload ไฟล์ </label> < href = "/download/bydefault? filename = dubbo.png" rel = "external nofollow" เป้าหมาย = "_ blank"> ใช้วิธีการเริ่มต้นเพื่อดูภาพ Dubbo ที่อัปโหลดไปยังดิสก์ </a> </button> ในการดาวน์โหลดภาพ Dubbo </a> </putton> </div> <div> <button> <a href = "/download/byconvert? filename = dubbo.png" rel = "external nofollow"> ใช้วิธีเริ่มต้นในการดาวน์โหลดภาพ Dubbo </a> nofollow "target =" _ blank "> ใช้ตัวแปลง MVC เพื่อดูภาพ Dubbo ที่อัพโหลดไปยังดิสก์ </a> </button> <ปุ่ม> <a href ="/ดาวน์โหลด/byconvert? filename = dubbo.png & savename = dub.png "rel =" external nofollow " </div> </div> </body> </html>ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น