Jika Anda perlu mengunggah file di seluruh server, Anda mengunggah file lokal kami ke server sumber daya. Cara yang lebih baik adalah mengunggahnya melalui FTP. Ini diunggah dalam kombinasi dengan springmvc+ftp. Pertama -tama kita perlu memahami cara mengkonfigurasi springmvc, kemudian mengkonfigurasi FTP, dan akhirnya mengunggah file dalam kombinasi dengan MultipartFile.
Upload SpringMVC memerlukan beberapa paket toples utama, paket pegas dan terkait dapat dikonfigurasi sendiri. Di sini kami terutama menjelaskan paket stoples kunci
1: Spring-Web-3.2.9.release.jar (Paket Jar Kunci Musim Semi, Anda dapat memilih versi sendiri)
2: commons-io-2.2.jar (beberapa paket alat yang digunakan untuk menangani IO dalam proyek)
File konfigurasi
SpringMVC menggunakan MultipartFile untuk mengunggah file, jadi kita perlu mengonfigurasi multipartresolver untuk menangani file dalam formulir
<!-Unggah Interpreter File-> <bean id = "multipartresolver"> <name properti = "defaultEncoding" value = "utf-8" /> <name properti = "maxuploadsize" value = "10485760" /> <nama properti = "maxInmemorySize" value = "4096" /" /" name = "name =" value "value =" 4096 " /" name = "name =" value "value" value "value =" 4096 ""
Atribut dijelaskan secara rinci:
DefaultEncoding Mengkonfigurasi Format Pengkodean Permintaan, Default ISO-8859-1
Unit maksimum dari file konfigurasi Maxuploadsize, dalam byte
MaxInMemorySize Mengkonfigurasi cache file yang diunggah, dalam byte
Properti resolvelazily diaktifkan untuk menunda resolusi file sehingga pengecualian ukuran file dapat ditangkap dalam pengunggahan
Konfigurasi halaman
Tambahkan enctype = "multipart/form-data" ke bentuk halaman
<Form id = "" name = "" Method = "Post" Action = "" Enctype = "Multipart/Form-Data">
Atur enctype = "multipart/form-data" dalam tag formulir untuk memastikan pengkodean yang benar dari file yang diunggah anonim.
Ini adalah pengkodean mime dari formulir. Secara default, format pengkodean ini adalah Application/X-WWW-Form-Burlencoded, yang tidak dapat digunakan untuk mengunggah file; Hanya dengan menggunakan Multipart/Form-Data, data file dapat sepenuhnya dilewati dan operasi berikut dilakukan. enctype = "multipart/form-data" adalah untuk mengunggah data biner. Nilai input dalam bentuk dilewatkan dengan cara 2 digit, sehingga permintaan tidak bisa mendapatkan nilainya.
Tulis kelas kontrol unggahan
Tulis metode unggahan, dan tidak ada hasil yang dikembalikan di sini. Jika Anda perlu melompat ke halaman atau mengembalikan nilai -nilai lain, Anda dapat mengubah void ke String, Peta <String, Object> dan nilai -nilai lainnya, dan kemudian kembali untuk kembali untuk mengembalikan hasilnya.
/** * Unggah * @param Permintaan * @return */@ResponseBody @RequestMapping (value = "/unggah", metode = {requestMethod.get, requestMethod.post}) void publik unggah (httpservletRequest) {MultipARTHTPServleteDreQuest (httpservletRequest) {MultipARTHTPServleteDreQuest (httpservletRequest) {MultipARTHTPServleteest File multipartFile = multipartrequest.getFile ("file"); // File adalah nama nama halaman input halaman basepath = "path file" coba {multipartresolver resolver = new CommonsMultiPartresolver (request.getSession (). GetServletContext ()); if (resolver.ismultipart (request)) {string filestoredPath = "path folder"; // nama file yang dihasilkan acak string randomName = stringutil.getRandomFileName (); String unggahFileName = file.getoriginalfileName (); if (stringutils.isnotblank (unggahfileName)) {// mencegat nama format file string suffix = unggahFileName.substring (unggahfileName.indexof (".")); // Kembalikan nama file string newFileName = acak + sufiks; String savePath = Basepath + "/" + newFileName; File saveFile = file baru (savePath); File parentFile = saveFile.getParentFile (); if (saveFile.exists ()) {saveFile.delete (); } else {if (! Parentfile.exists ()) {parentfile.mkdirs (); }} // Salin file ke jalur path yang ditentukan. CopyInputStreamToFile (file.getInputStream (), saveFile); // unggah file ke server ftpclientutil.upload (saveFile, filestoredPath); }}} catch (Exception e) {e.printstacktrace (); }} Alat Unggah Klien FTP
paket com.yuananding.common.util; impor java.io.file; impor java.io.fileInputStream; impor java.io.fileoutputStream; impor java.io.ioException; impor java.io.inputstream; impor java.io.outputStream; impor java.net.socketexception; impor java.util.hashmap; impor java.util.map; impor java.util.properties; impor org.apache.commons.lang.stringutils; impor org.apache.commons.net.ftp.ftp; impor org.apache.commons.net.ftp.ftpclient; impor org.apache.commons.net.ftp.ftpreply; impor org.slf4j.logger; impor org.slf4j.loggerFactory; / *** Alat klien FTP*/ kelas publik ftpClientUtil {/ *** log*/ private static final Logger Logger = loggerFactory.getLogger (ftpclientutil.class); / ** * Konfigurasi Server FTP-Kunci IP, Nilai adalah Jenis String */ Public Static Final String Server_IP = "Server_IP"; / ** * Konfigurasi Server FTP-Kunci port, nilai adalah jenis integer */ public static final string server_port = "server_port"; / ** * Konfigurasi Server FTP-kunci log anonim, nilai adalah jenis boolean */ string akhir statis public is_anonymous = "is_anonymous"; / ** * Nama pengguna login anonim */ string akhir statis public anonymous_user_name = "anonymous"; / ** * Kata sandi login anonim */ string akhir statis public anonymous_password = ""; / ** * Konfigurasi Server FTP-Log dalam Nama Pengguna, Nilai adalah Jenis String */ Public Static Final String user_name = "user_name"; / ** * Konfigurasi Server FTP-Log dalam Kata Sandi, Nilai adalah Jenis String */ Public Static Final String Password = "Kata Sandi"; / ** * Konfigurasi Server FTP-Kunci PASV, Nilai adalah jenis boolean */ string akhir statis public is_pasv = "is_pasv"; /** * Konfigurasi Server FTP-Kunci Direktori Kerja, Nilai adalah Jenis String Saat masuk, direktori saat ini * adalah direktori home pengguna, WorkingDirectory harus ditetapkan berdasarkan itu. Selain itu, WorkingDirectory harus ada, tidak dapat dibuat secara otomatis. Jika tidak ada, file akan diunggah di direktori home pengguna. Jika * tidak ditugaskan, "/" digunakan. */ string final statis public working_directory = "working_directory"; peta statis publik <string, objek> servercfg = hashmap baru <string, object> (); Prop Properti Statis; static {logger.info ("Mulai memuat file ftp.properties!"); prop = properti baru (); coba {inputStream fps = ftpclientutil.class.getResourceAsstream ("/ftp.properties"); prop.load (fps); fps.close (); } catch (Exception e) {logger.error ("Exception membaca file ftp.properties!", e); } serverCfg.put (ftpClientutil.server_ip, values ("server_ip")); servercfg.put (ftpclientutil.server_port, integer.parseint (values ("server_port")))); servercfg.put (ftpclientutil.user_name, values ("user_name")); servercfg.put (ftpClientutil.password, values ("password")); Logger.info (string.valueof (serverCfg)); } /*** Unggah file ke server FTP. * * @param servercfg: konfigurasi server ftp * @param filepathtoupload: jalur file untuk mengunggah * @param filestoredName: Nama untuk memberikan file yang disimpan dari jarak jauh, nol, "dan kata -kata yang dikeluarkan, @throws @throws @throws IoException * @throws SocketException * FilePathToupload, String FileStoredName) melempar SocketException, ioException {unggah (serverCfg, file baru (filePathToupload), filestoredName); } /*** Unggah file ke server FTP. * * @param servercfg: konfigurasi server ftp * @param filetoupload: File untuk mengunggah * @param filestoredName: Nama untuk memberikan file yang disimpan dari jarak jauh, null, "" dan kata kosong lainnya akan diganti * dengan nama file untuk mengunggah * @throws IoException * @THROWS SocketException */ File @throws unggas IoException * @THROWS SocketException */ Public Static Static Stancy FileTouplead, String FileStoredName) melempar SocketException, IoException {if (! FileToupload.exists ()) {Throw new IllegalArgumentException ("File untuk mengunggah tidak ada:" + filetoupload.getAbsolutepath ()); } if (! filetouplead.isfile ()) {lempar new IllegalArgumentException ("File untuk mengunggah bukanlah file:" + filetoupload.getAbsolutePath ()); } if (stringutils.isblank ((string) servercfg.get (server_ip))) {throw new IllegalArgumentException ("Server_IP harus terkandung dalam konfigurasi server FTP."); } transferFile (true, serverCfg, filetouppload, filestoredName, null, null); } /** * Download a file from FTP server * * @param serverCfg : FTP server configuration * @param fileNameToDownload : file name to be downloaded * @param fileStoredPath : stored path of the downloaded file in local * @throws SocketException * @throws IOException */ public static final void download(Map<String, Object> serverCfg, String fileNameToDownload, String FileStoredPath) melempar SocketException, IoException {if (stringutils.isblank (filenametodownload)) {lempar IllegalArgumentException baru ("Nama file yang akan diunduh tidak dapat kosong."); } if (stringutils.isBlank (filestoredPath)) {lempar baru ilegalargumentException ("jalur yang tersimpan dari file yang diunduh di lokal tidak dapat kosong."); } if (stringutils.isblank ((string) servercfg.get (server_ip))) {throw new IllegalArgumentException ("Server_IP harus terkandung dalam konfigurasi server FTP."); } transferFile (false, servercfg, null, null, filenametodownload, filestoredpath); } private static final void transferFile (boolean isUpload, peta <string, objek> serverCfg, file filetoupload, string serverfileStoredName, string filenametodownload, string localfileStoredPath) lemparan socketexception, ioException {string host = (string) servercfg.get), iooexception {string host = (string) servercfg.get); Integer port = (integer) servercfg.get (server_port); Boolean isanonymous = (boolean) servercfg.get (is_anonymous); String username = (string) servercfg.get (user_name); String password = (string) servercfg.get (kata sandi); Boolean ispasv = (boolean) servercfg.get (is_pasv); String workingDirectory = (string) servercfg.get (working_directory); FtpClient ftpClient = ftpClient baru (); InputStream filein = null; OutputStream fileout = null; coba {if (port == null) {logger.debug ("Sambungkan ke server FTP di" + host + ":" + ftp.default_port); ftpClient.Connect (host); } else {logger.debug ("Connect to FTP Server di" + host + ":" + port); ftpclient.connect (host, port); } int balasan = ftpclient.getReplycode (); if (! ftpreply.ispositiveCompletion (balasan)) {logger.error ("server ftp menolak koneksi"); kembali; } if (isanonymous! = null && isanonymous) {username = anonymous_user_name; kata sandi = anonymous_password; } Logger.debug ("Masuk server FTP dengan nama pengguna =" + nama pengguna + ", kata sandi =" + kata sandi); if (! ftpclient.login (nama pengguna, kata sandi)) {logger.error ("Gagal masuk server ftp dengan nama pengguna =" + nama pengguna + ", kata sandi =" + kata sandi); ftpclient.logout (); kembali; } // Di sini kita akan menggunakan mode biner sebagai jenis file transfer, // mode ASCII tidak didukung. Logger.debug ("Setel jenis file, yaitu mengunggah, untuk biner."); ftpClient.setFileType (ftp.binary_file_type); if (ispasv! = null && iSpasv) {logger.debug ("Gunakan mode PASV untuk mentransfer file."); ftpClient.enterLocalPassiveMode (); } else {logger.debug ("Gunakan mode aktif untuk mentransfer file."); ftpClient.enterLocalActiveMode (); } if (stringutils.isBlank (workingDirectory)) {workingDirectory = "/"; } Logger.debug ("Ubah direktori kerja saat ini ke" + workingdirectory); ChangeworkingDirectory (FTPClient, WorkingDirectory); if (isuPload) {// unggah if (stringutils.isblank (serverfilesttoredName)) {serverfilestoredName = filetoupload.getName (); } filein = FileInputStream baru (FileTouplead); Logger.debug ("File unggah:" + filetouplead.getAbsolutePath () + "ke server FTP dengan nama:" + serverfileStoredName); if (! ftpclient.storefile (serverfilestoredName, filein)) {logger.error ("Gagal mengunggah file," + ftpclient.getReplyString ()); } else {logger.debug ("Sukses untuk mengunggah file."); }} else {// download // Pastikan direktori file ada file filestored = file baru (localfilestoredpath); if (! filestored.getParentFile (). Exists ()) {filestored.getParentFile (). mkdirs (); } fileout = FileOutputStream baru (filestored); Logger.Debug ("File Unduh:" + FileNametodOwnload + "dari server FTP ke lokal:" + localfileStoredPath); if (! ftpClient.RetrieveFile (filenametodownload, fileout)) {logger.error ("Gagal mengunduh file," + ftpclient.getReplyString ()); } else {logger.debug ("Sukses untuk mengunduh file."); }} ftpclient.noop (); ftpclient.logout (); } akhirnya {if (ftpclient.isconnected ()) {coba {ftpclient.disconnect (); } catch (ioException f) {}} if (filein! = null) {coba {filein.close (); } catch (ioException e) {}} if (fileout! = null) {coba {fileout.close (); } catch (ioException e) {}}} private static final boolean changeworkingdirectory (ftpClient ftpclient, string workingdirectory) melempar ioException {if (! ftpclient.changeworkingDirectory (workingDirectory)) {string [] working. untuk (int i = 0; i <paths.length; i ++) {if (! "". Equals (Paths [i])) {if (! ftpClient.ChangeworkingDirectory (Paths [i])) {ftpClient.makedirectory (Paths [i]); ftpclient.changeworkingdirectory (jalur [i]); }}} return true; } Uploid final statis public static (peta <String, Object> ServerCfg, String FilePathToupload, String FileStoredPath, String FileStoredName) Melempar SocketException, IoException {unggah (serverCfg, file baru (filePathToupload), FileStoredPath, filestName); } Upload void final statis publik (peta <string, objek> serverCfg, file filetoupload, string filestoredPath, string filestoredName) melempar socketexception, ioException {if (filestoredPath! = null &&! " } unggah (serverCfg, filetoupload, filestoredName); } Upload void akhir public static (String FilePathToupload, String FileStoredPath) melempar SocketException, ioException {unggah (serverCfg, filepathtoupload, filestoredPath, ""); } Upload void akhir public static (File FileToupload, String FileStoredPath) melempar SocketException, ioException {unggah (serverCfg, filetoupload, filestoredPath, ""); } public static string values (tombol string) {string value = prop.getProperty (key); if (value! = null) {nilai kembali; } else {return null; }}} ftp.properties
#Server Address Server_IP = 192.168.1.1 #Server Port Server_port = 21 #Account Nama user_name = userftp #password #passwordftp
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.