Tulis di depan
Ketika datang ke unggahan file, pertama -tama kita harus berbicara tentang logika bisnis. Jika semua orang dapat melihat file yang diunggah (seperti iklan atau spanduk di beranda), maka kami meletakkan gambar di area sumber daya statis (lokasi yang sama dengan CSS dan JS). Jika file dilindungi (seperti pengguna hanya dapat melihat foto yang diunggah sendiri), maka kami menyimpannya di lokasi di server di mana gambar disimpan secara khusus.
Contoh ini menunjukkan metode mengunggah file yang disimpan di dua lokasi. Setelah mengunggah, sebagai ekstensi, fungsi melihat file yang diunggah dan mengunduh file yang diunggah juga ditambahkan.
Persiapan
Konfigurasikan Paket SpringMVC dan Impor Commons
Konfigurasikan Parser Unggah File di mvc-servlet.xml
<!-File Unggah parser-> <bean id = "multipartresolver"> <name properti = "maxuploadsize" value = "1000000"/> <name properti = "defaultEncoding" value = "utf-8"/> </bean>
Disimpan di area sumber daya statis
1. Lokasi Penyimpanan:
Disimpan dalam proyek, jadi jalurnya adalah jalur relatif terhadap proyek.
/{YourProject}/Webapp/Static/IMG
2. Konfigurasikan penangan yang merespons
@ControllerPublic kelas unggahController {@getmapping ("/unggah") string publik unggahhandler () {return "unggah"; } @Postmapping ("/unggah/statis") public void writostatic (permintaan httpservletRequest, mengarahkan ulang redirectattributes, @requestparam ("fileName") (if (! File. "Static/IMG/"; // Dapatkan nama file sumber yang diunggah oleh fileName string pengguna = file.getoriginalFileName (); // Buat file file baru file1 = file baru (path, fileName); // tulis file ke file.transferto (file1); redirectattributes.addflashattribute ("pesan", "Unggah ke kesuksesan statis"); mengembalikan "Redirect:/Unggah"; } else {redirectattributes.addflashattribute ("pesan", "unggah file tidak bisa kosong"); mengembalikan "Redirect:/Unggah"; }}}Simpan di server
1. Lokasi penyimpanan contoh ini:
Disimpan di lokasi tertentu di server, tidak ada hubungannya dengan proyek, sehingga alamatnya adalah jalur absolut.
/Pengguna/mac/desktop/imgtemp/, adalah jalur absolut ke direktori.
2. Konfigurasikan penangan yang merespons
... @postmapping ("/unggah/disk") string publik writeToDisk (permintaan httpservletrequest, @RequestParam ("fileName") file multipartfile, redirectattributes redirectattributes) {if (! File.isempty ()) {// dapatkan file sumber file string) {if (! // Dapatkan path string folder save folder = "/pengguna/mac/desktop/imgtemp/"; // Buat file file baru file1 = file baru (path, fileName); // tulis file file.transferto (file1); }} ...Bagian yang diperluas (Lihat dan Unduh File)
Karena responsnya adalah untuk meneruskan file dalam bentuk aliran, kita perlu mengatur jenis mimie dengan benar dari respons agar diuraikan dengan benar oleh browser. Jenis mimie default dari file aplikasi adalah aplikasi/oktet-stream. Setelah MIME diatur ke nilai ini, browser tidak akan secara otomatis mengeksekusi atau meminta untuk menjalankan file tersebut, dan akan langsung mengunduh file ke area lokal dalam bentuk perawatan lampiran.
Untuk interpretasi lebih lanjut tentang Mimie, silakan periksa artikel ini
Jika kami ingin menyesuaikan nama file unduhan, kami perlu mengatur pesan disposisi konten.
Disposisi konten Header pesan menunjukkan bentuk balasan yang akan ditampilkan, apakah itu inline (mis., Halaman web atau bagian dari halaman), atau diunduh dan disimpan secara lokal dalam bentuk lampiran.
Untuk informasi lebih lanjut tentang disposisi konten, silakan periksa artikel ini
...@getMapping ("/download/bydefault") public void getImgbyDefault (@RequestParam String FileName, @RequestParam (wajib = false, defaultValue = "") string savename), httpservletResponse response {if (stringutils.isempty (filename)) {response) {response) {if stringUtil. kembali; } // jalur path string penyimpanan file = "/user/mac/desktop/imgtemp/"; // file file baru = file baru (path, nama file); if (! file.exists ()) {response.senderror (404); kembali; } // Jika parameter permintaan Savename tidak kosong, unduh file if (! Stringutils.isempty (saveName)) {// Atur response response.setContentLength ((int) file.length ()); // Atur tipe MIME dari respons ke aplikasi/octet-stream response.setContentType (mediatype.application_octet_stream_value); savename = string baru (savename.getbytes ("UTF-8"), "iso8859-1"); // atur disposisi konten ke lampiran; FileName = Savename Response.setHeader (httpheaders.content_disposisi, "lampiran; nama file =/" "+Savename+"/""); } // Baca file inputStream adalah = FileInputStream baru (file); OutputStream os = response.getoutputStream (); // file output ioutils.copy (IS, OS); os.flush (); os.close (); is.close ();}Kami juga dapat menggunakan konverter ByteArrayHttpMessageConverter yang dilengkapi dengan SpringMVC untuk mengeluarkan file, yang mengimplementasikan antarmuka HTTPMessageConverter. Semua informasi permintaan MIME dapat dibaca, dan mime informasi respons adalah aplikasi/oktet-stream
...@getMapping ("/download/byconvert") httpentity publik <byte []> getImgbyConvert (@RequestParam string fileName, @RequestParam (wajib = false, defaultValue = "") {retreOnte reterEnte (stringutils.isempty (FileName) {retroke. } String path = "/user/mac/desktop/imgtemp/"; File file = file baru (path, nama file); if (! File.exists ()) {return New ResponseEntity <> (httpstatus.not_found); } Header httpheaders = httpheaders baru (); if (! stringutils.isempty (saveName)) {headers.setContentType (mediatype.application_octet_stream_value); headers.setContentLength (file.length ()); Savename = Sting baru (savename.getbytes ("UTF-8"), "ISO8859-1"); headers.add (httpheaders.content_disposisi, "lampiran; nama file =/" " + Savename +"/""); } else {headers.setContentType (mediatype.image_png); } return httpentity baru <> (filecopyutils.copytobytearray (file), header);}unggah.jsp
<%@ page contentType = "Teks/html; charset = utf-8" bahasa = "java"%> <%@ taglib awalan = "form" uri = "http://www.springframework.org/tags/form"%> <%@ taglib prefix = "c" uri="http://java.sun.com/jsp/jstl/core" %><!doctype html><html><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv = "x-ua-kompatibel" content = "ie = edge"> <itement> dokumen </iteme> <tautan rel = "stylesheet" href = "/static/bootstrap-3.3.5-distr/css/bootstrap.css" rel = "eksternal nofollowow ikut ikut unggul"> </css/unggah </css/unggah </csss/unggah </csss "rel =" eksternal "> </css/css. test = "$ {not kosong pesan}"> <h2> $ {pesan} </h2> </c: if> <form: form enctype = "multipart/form-data" action = "/unggah/statis"> <p> unggah ke/web/static </p> <label for = ""> unggah file: </label> <input/static </p> <label for for = "" </form: form> <form: form enctype = "multipart/form-data" action = "/unggah/disk"> <p> Unggah ke disk </p> <label for = ""> Unggah file </label> <input type = "file" name = "unggahfile"> <Button> Kirim </butt> </formulir: Form> </Form> </unggah A. href = "/download/bydefault? FileName = dubbo.png" rel = "eksternal nofollow" target = "_ blank"> Gunakan metode default untuk melihat gambar dubbo yang diunggah ke disk </a> </button> <buton> <a href = "/download/bydefault? FileName = dubbo.pnow = dubboF =" href = "/download/bydefault? FileName = dubbo.pnoF =" dubboF = "duBNET = dubboF = dubbo." > Gunakan metode default untuk mengunduh gambar dubbo </a> </button> </div> <div> <tutton> <a href = "/download/byconvert? FileName = dubbo.png" rel = "eksternal nofollow"> Gunakan metode default untuk mengunduh gambar dubbo </a> </tombol </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> </Div> href = "/download/byconvert? FileName = dubbo.png" rel = "eksternal nofollow" target = "_ blank"> Gunakan mvc converter untuk melihat gambar dubbo yang diunggah ke disk </a> </button> <button> <a href = "/unduh/byconvert? filename = dubbo." dubbo. dubbo. nofollow "> Gunakan konverter mvc untuk mengunduh gambar dubbo yang diunggah ke disk </a> </button> </div> </div> </body> </html>Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.