Artikel ini membandingkan dua contoh unggahan file untuk membantu semua orang lebih baik mempelajari fungsi unggahan file java. Konten spesifiknya adalah sebagai berikut
1. Kode Unggah Lampiran Java
@ControllerPublic Class unggahfile memperluas baseJsonController {/** * unggah lampiran * * @param permintaan * @param creativefile * @param respons * @return */@requestmapping (value = "/uppload/uploadfile.json") void unggahan public (httpservlete.jploadfile. 1. Untuk memastikan keamanan server, file yang diunggah harus ditempatkan di direktori yang tidak dapat diakses secara langsung oleh dunia luar, seperti di direktori web-inf. * 2. Untuk mencegah impliting file, nama file yang unik harus dihasilkan untuk mengunggah file. * 3. Untuk mencegah terlalu banyak file muncul di bawah direktori, Anda harus menggunakan algoritma hash untuk memecah penyimpanan. * 4. Nilai maksimum file yang diunggah harus dibatasi. * 5. Untuk membatasi jenis file yang diunggah, saat menerima nama file yang diunggah, tentukan apakah nama akhirannya legal. */// Dapatkan Direktori Simpan File yang Diunggah, simpan file yang diunggah di direktori Web-INF, dan tidak mengizinkan akses langsung dari dunia luar untuk memastikan keamanan file yang diunggah string savePath = request.getSession (). GetServletContext (). GetRealPath ("/web-inf/unggah"); // Direktori Penghematan File sementara yang dihasilkan selama string unggahan Temppath = request.getSession (). GetServletContext (). GetRealPath ("/Web-Inf/Temp"); File tmpfile = file baru (Temppath); if (! tmpFile.exists ()) {// Buat direktori sementara tmpfile.mkdirs (); } // pesan tersebut meminta jsonarray arr = new jsonarray (); Peta <String, Object> MAP = NULL; Inputstream in = null; FileOutputStream out = null; Coba {// Gunakan komponen unggahan file apache untuk menangani langkah -langkah unggahan file: // 1. Buat DiskfileItemFactory Factory DiskFileItemFactory Factory = New DiskFileItemFactory (); // Atur ukuran buffer pabrik. Ketika ukuran file yang diunggah melebihi ukuran buffer, file sementara akan dihasilkan dan disimpan dalam direktori sementara yang ditentukan. factory.setsizethreshold (1024*100); // Atur ukuran buffer ke 100kb. Jika tidak ditentukan, ukuran buffer adalah 10kb secara default. // Atur direktori penyimpanan file sementara yang dihasilkan selama mengunggah pabrik.setrepository (tmpFile); // 2. Buat file unggah file parser servletfileupload unggah = servletfileupload baru (pabrik); // supert file unggah progress unggah.setProgressListener (progressListener baru () {public void update (long pbytesread, long pcontentLength, int arg2) {System.out.println ("Ukuran file adalah:" + pContentLength + ", saat ini diproses:" + pbytesread);}; // Selesaikan unggahan yang kacau Cina. EsetHeaderencoding ("UTF-8"); // 3. Tentukan apakah data yang dikirimkan adalah data dari formulir unggahan jika (! ServletFileupload.ismultipartContent (permintaan)) {// Dapatkan pengembalian data sesuai dengan cara tradisional; } // Atur ukuran maksimum file tunggal yang diunggah, yang saat ini diatur ke 1024*1024 byte, yaitu, 20MB unggah.setFilesizeMax (1024*1024*20); // Atur nilai maksimum dari jumlah total file yang diunggah. Nilai maksimum = jumlah ukuran maksimum beberapa file yang diunggah secara bersamaan. Saat ini diatur ke unggahan 40MB.SetsizeMax (1024*1024*40); // 4. Gunakan Parser ServletFileUpload untuk menguraikan data yang diunggah. Hasil parsing mengembalikan koleksi daftar <FILEITEM>. Setiap fileItem sesuai dengan item input dari formulir form @SuppressWarnings ("Uncecked") Daftar <FILEITEM> Daftar = unggah.ParSequest (permintaan); untuk (item fileItem: daftar) {// Jika data item input biasa dienkapsulasi dalam fileItem if (item.isFormField ()) {string name = item.getFieldName (); // Selesaikan masalah Data Input Input Item Nilai STRING = Item.GetString ("UTF-8"); // value = string baru (value.getBytes ("iso8859-1"), "utf-8"); System.out.println (name + "=" + value); } else {// Jika item file dienkapsulasi dalam file yang diunggah // dapatkan nama file yang diunggah, string fileName = item.getName (); if (fileName == null || filename.trim (). equals ("")) {lanjutan; } // Catatan: Nama file yang dikirimkan oleh browser yang berbeda berbeda. Some browsers submit file names with paths, such as: c:/a/b/1.txt, while some are just simple file names, such as: 1.txt // Process the path part of the file name of the obtained uploaded file, only the file name part is retained filename = filename.substring(filename.lastIndexOf("//")+1); // Dapatkan ekstensi file string yang diunggah fileextName = filename.substring (filename.lastIndexof (".")+1); // Jika Anda perlu membatasi jenis file yang diunggah, Anda dapat menggunakan ekstensi file untuk menentukan apakah jenis file yang diunggah adalah legal jika (stringutils.equals (fileextName, "rar") || stringutils.equals (fileextName, "zip")) {throw Bizexception ("", "Unggah file compress compress adalah pelarangan compress adalah pelarangan bizexception (" "," Ungload file compress adalah pelarangan compress adalah pelarangan compress adalah pelarangan compress adalah unggahan adalah lengkungan compress file compress compress adalah unggahan compress file compress compress adalah unggahan adalah unggahan adalah file compress compress compress compress adalah unggahan adalah unggahan compress file compress compress file compress compress compress compress adalah unggahan adalah unggahan compress file compress compress adalah } /*************** /// Dapatkan aliran input file yang diunggah dalam item = item.getInputStream (); /******************/// Dapatkan nama file yang disimpan string saveFileName = makeFileName (fileName); // Dapatkan File Simpan Direktori String RealSavEpath = MakEpath (SaveFileName, SavePath); // Buat aliran output file out = new FileOutputStream (realSavePath + "//" + saveFileName); // Buat buffer buffer byte [] = byte baru [1024]; // Identifikasi apakah data dalam aliran input telah dibaca adalah int len = 0; // Loop membaca aliran input ke dalam buffer, (len = in.read (buffer))> 0 berarti bahwa masih ada data di dalam while ((len = in.read (buffer))> 0) {// Gunakan aliran output FileoutStream untuk menulis data buffer ke buffer (savePath + "// //////////////////2. } // tutup aliran input di.close (); // tutup aliran output out.close (); // hapus file sementara yang dihasilkan saat memproses file unggahan item.delete (); peta = hashmap baru <string, object> (); peta.put ("saveFileName", saveFileName); Map.put ("RealSavePath", RealSavepath); arr.add (peta); }} returnSucCessJson ("unggahbase.filesizelimitexededException e) {e.printstacktrace (); returnfailjson (e.getMessage ()," File tunggal melebihi nilai maksimum !!! ", respons);} catch (fileuploadbase.sizelimexexemed excepcepted); Returnfailjson (E.GetMessage (), "Ukuran total file yang diunggah melebihi batas maksimum!!", Respons); in.close (); // tutup aliran output out.close (); @Return uuid + "_" + Nama asli file */private string makefileName (string fileName) {//2.jpg // Untuk mencegah file impliting, nama file yang unik harus dihasilkan untuk mengunggah file uuid.randomuuid (). ToString () + " +" + nama file; } / ** * Untuk mencegah terlalu banyak file yang muncul di direktori, Anda perlu menggunakan algoritma hash untuk memecah penyimpanan * @method: makePath * @description: * @anthor: xuwentao * * @param nama file save neure, savePath) {// Dapatkan nilai hashCode dari nama file, dan apa yang Anda dapatkan adalah alamat dari nama file objek string di memori int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (HashCode & 0xf0) >> 4; // 0-15 // Bangun Simpan Direktori Simpan Dir = SavePath + "//" + Dir1 + "//" + Dir2; // Unggah/2/3 Unggah/3/5 // File dapat mewakili file file dan direktori file = file baru (dir); // Jika direktori tidak ada jika (! File.exists ()) {// Buat direktori file.mkdirs (); } return dir; }}2. Java unggah kode resume
/ ***Unggah resume*Kreasi 1 file Gagal 2-eksepsi 3-Upload gagal 4 file tidak diperoleh 5 file tidak dihapus 6-silakan unggah kata, excel, ppt, file pdf*//*path pemisah: digunakan dalam sistem operasi adaptif*/ private static string file_separator = System. / ** * Unggah File * * @param Fileio * @param OldContracturl * @param Permintaan * @Return alamat file pengembalian (alamat relatif, alamat non-absolute) */ @Override Public String Unggah (MultipartFile Fileio, String OldContracTurl, httpservletRequest permintaan) {string unggahan string = = = request.getSession (). getSerVletContext (). getRealPath ("file"); // hapus file dan folder jika (oldContracturl! = Null) {string oldDirectory = oldContracTurl.substring (5, oldContracturl.LastIndexof (file_separator)); File file = file baru (unggahanurl + oldDirectory); bendera boolean = deletedir (file); if (! flag) {logger.error ("Penghapusan file lama gagal"); mengembalikan "5"; }} // unggah file resume baru Long Now = System.CurrentTimeMillis (); unggahanUrl = unggahurl + file_separator + sekarang + file_separator; String resumeMeName = ""; if (! Fileio.isempty ()) {resumeMeame = stringutils.deletewhitespace (fileo.getoriginalfileName ()); // menilai file sufiks/*string suffix = resumeMeName.substring (resumeMe.lastIndexof ("."), ResumeMe.length ()) .tolowercase (); if (! ". Doc" .Equals (sufiks) &&! ". Docx" .Equals (sufiks) &&! ". xlsx" .Equals (sufiks) &&! " Logger.Error ("Bukan Word, Excel, PPT, File PDF"); mengembalikan "6"; }*/} else {logger.error ("File tidak diperoleh"); mengembalikan "4"; } File dir = file baru (unggah); if (! dir.exists ()) {dir.mkdirs (); } File targetFile = File baru (unggahanurl + resumeMeame); if (! TargetFile.exists ()) {coba {targetFile.createNewFile (); } catch (ioException e) {logger.error ("Pembuatan file gagal", e); mengembalikan "1"; }} coba {fileio.transferto (targetFile); } catch (ilegalstateException e) {logger.error ("Pengecualian kalimat", e); mengembalikan "2"; } catch (ioException e) {logger.error ("unggah gagal", e); mengembalikan "3"; } return file_separator + "file" + file_separator + sekarang + file_separator + resumeMerame; } /*** Hapus semua file secara rekursif di direktori dan semua file di subdirektori* @param dir direktori file yang akan dihapus* @return boolean mengembalikan "true" jika semua penghapusan berhasil. * Jika penghapusan gagal, metode berhenti mencoba * menghapus dan mengembalikan "false". */ public boolean deletedir (file dir) {if (dir.isdirectory ()) {string [] anak -anak = dir.list (); // hapus secara rekursif subdirektori di direktori untuk (int i = 0; i <anak -anak. if (! Success) {return false; }}} // Direktori kosong saat ini, Anda dapat menghapus return dir.delete (); }Di atas adalah semua konten artikel ini. Saya harap ini akan membantu untuk belajar semua orang dan menguasai keterampilan mengunggah file Java.