Unggah file java dan unduhan file adalah fungsi yang relatif umum dalam pengembangan program. Artikel berikut akan memperkenalkan kepada Anda tiga solusi untuk mengimplementasikan unggahan file dan unduh di Java. Detail spesifiknya adalah sebagai berikut;
Poin pertama: Kode Java mengimplementasikan unggahan file
FormFile file = manform.getFile (); String newFileName = null; String newPathName = null; string fileaddre = "/numup"; coba {inputStream stream = file.getInputStream (); // Baca file ke string filePath = request.getRealPath (fileaddre); // ambil jalur saat ini dari file sistem file1 = fILEPATH (FileAddre); // Ambil FUNGSI SISTEM FILEPATH = File baru = File baru (FilePath); file1) .mkdir (); newFileName = system.currentTimeMillis ()+ file.getFileName (). substring (file.getFileName (). lastIndexof ('.')); bytearrayOutputStream BAOS = bytearrayoutStream (); outputStream bos = FileoutStream baru (FileEteArrayOutStream (); outputStream BOS baru = FileoutStream (FilePatHePeTHePREAM () (); "outputStream BOS = FileOutStream (FileOtRePath () ();" outputStream BOS = FileoutStream (FileOtRePatHeam () (); "outputStream (FileOtSputStream () (); newFileName); newPathName = filePath+"/"+newFileName; System.out.println (newPathName); // Buat aliran output untuk mengunggah file system.out.println (filepath+"/"+file. while ((bytesread = stream.read (buffer, 0, 8192))! = -1) {bos.write (buffer, 0, bytesread); // tulis file ke server} bos.close (); stream.close ();} catch (filenotfoundException e) {e. e.printsck.close (); {E.PrintStackTrace ();}Poin kedua: Menerapkan unggahan file di halaman JSP
Paket com.vogoal.util; impor java.io.bufferedoutputStream; import java.io.file; impor java.io.fileoutputstream; java.io.ioException; impor java.text.simpledformat; impor java.util.arraylist; impor Java. javax.servlet.servletInputStream; import javax.servlet.http.httpservletrequest; kelas publik jspfileupload {/** permintaan objek*/private httpservletrequest permintaan = null;/** Path untuk mengunggah file*/private string unggahan unggahan = null;/** = 1024*8;/** Hashtable yang menyimpan parameter*/hashtable pribadi paramht = new Hasptable ();/** ArrayList yang menyimpan nama file dari file yang diunggah*/private arraylist updFileArr = new arraylist ();/*** Setel objek permintaan. ** @param Permintaan* Objek Permintaan HttpServletRequest*/public void setRequest (permintaan httpservletRequest) {this.Request = request;}/*** Atur jalur unggahan file. * * @param path * Jalur unggahan file yang ditentukan oleh pengguna. */public void setuploadpath (string path) {this.uploadpath = path;}/*** Program utama untuk pemrosesan unggahan file. ������b * * @return int Hasil operasi 0 Operasi file berhasil; 1 objek permintaan tidak ada. 2 Path hemat file tidak diatur atau jalur penghematan file salah; 3* Enctype yang benar tidak diatur; 4 Operasi file tidak normal. */Proses int publik () {int status = 0; // Sebelum mengunggah file, periksa objek permintaan, unggah path dan enctype. Status = precheck (); // Mengembalikan kode kesalahan saat kesalahan terjadi. if (status! = 0) return status; coba {// �� Parameter atau nama file �u��String name = null; // Parameter nilai penilai = null; // apakah aliran baca adalah file bit bit bit boolean fileflag = false; // file untuk disimpan. File tmpFile = null; // nama file string yang diunggah fname = null; FileOutputStream Baos = null; bufferedOutputStream bos = null; // ��hashtableParamht = hashtable baru (); upfileArr = new arraylist (); intnpoS = 0; Buffse (UpdFileArr = new arraylist (); intrsnpos = 0; Buffse [BuffseREarr = new arrayList (); intrsnpoS = 0; Buffse [BuffseREarr = new arrayList (); int rtnpoS = 0; �Get ContentTypestring contentType = request.getContentType (); int index = contentType.IndexOf ("Boundary ="); String Boundary = "-" + ContentType.substring (indeks + 9); String endboundary = Boundary + "-"; // � Dapatkan aliran dari objek permintaan. ServletInputStream sis = request.getInputStream (); // baca 1 baris while ((rtnpos = sis.readline (buffs, 0, buffs.length))! = -1) {string strbuff = string baru (buff, 0, rtnpos); // baca 1 baris data�n�if (strbuff.)); name.trim (). length ()> 0) {if (fileFlag) {bos.flush (); Baos.close (); bos.close (); Baos = null; bos = null; upplearr.add (fname);} else {objek obj = paramht.get (name); name); fname);} else {objek obj = paramht.get (name); {al = (arraylist) obj;} al.add (value); System.out.println (value); paramht.put (name, al);}} name = new string (); value = new string (); fileflag = false; fname = new string (); rtnpos = sis.readline (Buffs, BUFFLYE = BUFFSE (); rtnpos = sis.readline (Buffs, BUFFLYGE = BUFF.); {strbuff = string baru (buffs, 0, rtnpos); if (strbuff.tolowercase (). startswith ("konten-disposisi: form-data;"))) {int nindex = strbuff.tolowercase (). indexof ("name =/" "); int nlastindex = strbuff.tolcase (). strbuff.substring (nindex + 6, nLastIndex);} int findex = strbuff.tolowercase (). IndexOf ("FileName =/" "); if (findex! = -1) {fileflag = true; int flastIndex = strbuff.tolowercase (). IndexOf ("/"" "" "" 10, FLASTIndex); fname = getFileName (fname); if (fname == null || fname.trim (). length () == 0) {fileflag = false; sis.readline (buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length); lanjutkan;} else {fname = getfilene); buffs.length); Sis.readline (buffs, 0, buffs.length);}}} lain if (strbuff.startswith (endboundary)) {if (name! = null && name.trim (). Length ()> 0) {if (fileflag) {bos.flathush (baos); null; updfilearr.add (fname);} else {objek obj = paramht.get (name); arraylist al = new arraylist (); if (obj! = null) {al = (arraylist) obj;} al.add (value); paramHt.put (name, al);}} {ife {ife); null && bos == null) {tmpFile = file baru (unggahpath + fname); baos = FileOutputStream baru (tmpFile); bos = bufferedoutputstream baru (baos);} bos.write (buffs, 0, rtnpos); baos. "-" + strbuff); value = value + strbuff;}}}} catch (ioException e) {status = 4;} return status;} private int precheck () {int errcode = 0; if (request == null) return 1; if (unggah (unggah == null || unggahpath.trim (). length () == 0) return 2; else {file tmpf = file baru (unggahPath); if (! tmpf.exists ()) return 2;} string contentType = request.getContentype (); if (contentType.IndexOf ("multipart/form -data") == - name) {string value = ""; if (name == null || name.trim (). length () == 0) value value; value = (paramHt.get (name) == null)? "" ":( string) ((arraylist) name (name). name.trim (). length () == 0) return null; if (paramht.get (name) == null) return null; arraylist al = (arraylist) paramht.get (name); string [] strarr = string baru [al.size ()]; untuk (int i = 0; i <al.size (); i ++ (); untuk (int i = 0; i <al.size (); i ++) (int) (int (int i = 0; i <al.size (); i+ ++ (int) (int (int i = 0; i <al int getUpdfileSize () {return updfileArr.size ();} public string [] getUpdfileNames () {string [] strarr = string baru [updFileArr.size ()]; for (int i = 0; i <updFileArr.size (); i ++) strarr [i] (string) (string) (string) (string) (string) (i+ i ++) strarret (iPREARR (); i ++) STRARR (iPREARR (); getFileName (input string) {int findex = input.LastIndExof ("//"); if (findex == -1) {findex = input.lastIndexof ("/"); if (findex == -1) {return input;} input = input.substring (findex + 1); input; input; input {input} input = input.substring (findex + 1); index = input.indexof ("."); tanggal dt = tanggal baru (); SimpleDateFormat SDF = new SimpleDateFormat ("yyyymmddhhmmsssss"); return input.substring (0, index) + sdf.format (dt) + input.substring (ow index); index);}} sdf.Format (dt) +2. Referensi kelas Java di halaman JSP:
<%@page import="com.vogoal.util.JspFileUpload"%><%//Initialize JspFileUpload jfu = new JspFileUpload();//Set the request object jfu.setRequest(request);//Set the uploaded file path jfu.setUploadPath("C://");//Upload processing int rtn = jfu.process (); // Dapatkan nilai parameter kontrol input lainnya dalam bentuk string username = jfu.getParameter ("nama pengguna"); // Jika ada beberapa kontrol input untuk parameter yang sama, kembalikan array string [] Usernamearr = jfu.getPareMeters ("username");//get unggah = jfu.getPareMeters ("username");//get the unggas [get unggah ["Username");//Get The unggas [get unggah ["username");//get the unggah [get the unggah ["username");//get the unggah [get the unggas ["username");//get the unggah [unggah] ["get unggah [" username ");//get the unggah [get unggah [" Username ");//Get the unggah [" get the unggah ("Username"); jfu.getUpdfileNames (); // Dapatkan jumlah file yang diunggah, metode ini sedikit tidak berguna int filenumber = jfu.getupdfileSize (); // berikut ini adalah output kode untuk pengujian. // out.println ("Parameter:" + username); // out.println ("Ukuran parameter:" + usernamearr.length); // out.println ("ukuran filearr:" + filearr.length); // if (filearr.length> 0) // out.println ("Poin ketiga: Struts2 mengimplementasikan pengunggahan dan unduhan file
Langkah 1: Tambahkan Commons-FileUpload-1.2.1.jar dan Commons -o-1.3.2.jar di bawah Web-Inf/Lib. Kedua file ini dapat diunduh dari http://commons.apache.org/.
Langkah 2: Atur enctype tabel formulir ke: "multipart/form-data", sebagai berikut:
Kode Java
unggahan kelas publik {private file unggah; // File Private String unggahimageContentType; // File Jenis File Private String UnggoadImageFileName; // File Nama Private String Bookname; // Buku Nama Private String Author; // Penulis Private String SavePath; // File Simpan Lokasi // Atribut Getter/Setter Metode Public String Unggah () Mengunggah Exception {// Isiapkan Kode Upload, i/O OPERASI PUBLIC }}CATATAN: Domain file dalam formulir sesuai dengan tiga properti dalam tindakan, yaitu, nama file, dan jenis file. Penamaan ditetapkan. Nama file harus sama dengan nama domain file dalam formulir (unggah). Nama file adalah: File + FileName, dan Jenis File: File + ContentType.
Langkah 4: Mengkonfigurasi tindakan unggahan kami menjadi struts.xml.
Kode Java
<action name = "unggah"> <param name = "savePath">/uploadFile </param> <rances> /success.jsp </rence> </cich>
Catatan: Untuk menentukan direktori Simpan dari file yang diunggah di server, Anda perlu menentukan variabel savePath dalam unggahan dan menambahkan metode setter dan getter yang sesuai ke dalamnya, sehingga struts2 dapat menetapkan /unggah unggahan ke atribut savePath, yaitu, untuk menggunakan variabel savePath dalam unggahan, Anda harus define di dalam unggah.
Jenis File Konfigurasi Manual
<param name = "AllowTypes"> Gambar/BMP, Image/PNG, Image/GIF, Image/JPEG </param>
Batas ukuran file konfigurasi manual
<param name = "MaximumSize"> 1048576 </param>
Gunakan Interceptor Unggah File Struts2 untuk mengimplementasikan pemfilteran file
Struts2 menyediakan file unggahan file interceptor - fileupload. Dengan mengkonfigurasi interseptor ini, pemfilteran file yang diunggah dapat dengan mudah dicapai.
Saat mengkonfigurasi Interceptor Fileupload, Anda dapat menentukan dua parameter untuk itu:
Diizinkan Types: Menentukan jenis file yang diizinkan diunggah, dipisahkan oleh koma bahasa Inggris (,).
Maksimal: Menentukan ukuran file yang diunggah untuk diunggah dalam byte.
Tip: Dengan mengkonfigurasi Interceptor Fileupload, Anda dapat dengan mudah menerapkan pemfilteran file. Ketika penyaringan file gagal, sistem akan secara otomatis mentransfer ke tampilan logis input. Oleh karena itu, tampilan logis yang disebut input harus dikonfigurasi untuk tindakan tersebut. Selain itu, referensi interseptor dari DefaultStack harus dikonfigurasi untuk tindakan tersebut.
Gunakan Interceptor Struts2 untuk mengimplementasikan konfigurasi filter file sebagai berikut:
<action name = "unggahFileAction"> <interceptor-ref name = "defaultStack"> <!-Konfigurasikan jenis file yang diunggah, dipisahkan oleh beberapa menggunakan ","-> <param name = "Fileupload.allowedTypes"> gambar/bmp, gambar/png, gambar/gif, gambar/jpeg/jpeg "> gambar/bmp, gambar/png, gambar/gif, gambar/jpeg/jpeg"> gambar/bmp, gambar/png, gambar/gif, gambar/jpeg/jpeg "> gambar/bmp, gambar/png, gambar/gif, gambar/jpeg/jpeg"> gambar/bmp, gambar/png, Image/GIF, Image/JPEG/JPEG " <!-- Configure the file size allowed to be uploaded, unit bytes, this example is: 1MB --> <param name="fileUpload.maximumSize">1048576</param> </interceptor-ref> <result name="input">/jsp/oneFileFileupload.jsp</result> <result name="success">/jsp/result.jsp</result> </action>
Ketika pengguna gagal mengunggah, ada pesan cepat tertentu. Di Struts2, gunakan tag <s: fielderror/> untuk mengeluarkan pesan kesalahan ke halaman.
Catatan: Jika Anda ingin menggunakan Informasi Prompt Kesalahan Struts2, kelas tindakan yang mengunggah file harus mewarisi Actionsupport, jika tidak Struts2 tidak akan memberikan fungsi informasi prompt kesalahan output.
Kami dapat mengonfigurasi file sumber daya (.properties) untuk menyimpan output informasi kepada pengguna.
struts.messages.eror.file.too.large: Ketika ukuran file unggah melebihi nilai yang ditetapkan, Struts2 akan menghasilkan informasi prompt yang sesuai dengan kunci.
struts.messages.error.content.type.not.allowed: Ketika jenis file yang diunggah tidak memenuhi nilai yang ditetapkan, Struts2 akan menghasilkan informasi prompt yang sesuai dengan kunci.
struts.messages.error.uploading: Ketika kesalahan yang tidak diketahui terjadi saat mengunggah file, Struts2 akan menghasilkan informasi prompt yang sesuai dengan kunci.
Kami juga perlu mengkonfigurasi file sumber daya ke dalam file struts.xml. Selanjutnya, kita harus melihat file sumber daya kita. Itu sudah berisi bahasa Cina. Kami harus mengonversinya dan kemudian mengonfigurasinya ke dalam proyek.
Atur file sumber daya di struts.xml:
<nama konstan = "struts.custom.i18n.resources" value = "pesan"/> atau <name konstan = "struts.custom.i18n.resources" value = "message_zh_cn"/>
Gunakan perintah Native2ASCII D: /Messages.Properties D: /Messages_zh_cn.properties untuk mengubah file sumber daya asli menjadi yang didukung.
CATATAN: Keep International, nama akhiran dari file sumber daya adalah: *_zh_cn + ekstensi file.
Prinsip mengunggah beberapa file sama seperti di atas, tetapi harus dicatat bahwa nama atribut nama dari beberapa bidang file harus sama, dan dalam tindakan, file [] atau daftar <file> harus digunakan untuk menerimanya.
Saya pribadi berpikir bahwa menggunakan metode ini untuk mengunggah beberapa file tidak
sangat bagus.
Struts2 untuk unduhan file
Struts2 menyediakan jenis hasil aliran, yang secara khusus digunakan untuk mendukung pengunduhan file. Saat menentukan jenis hasil aliran, parameter inputName perlu dikonfigurasi, yang menentukan aliran input, yang merupakan pintu masuk ke file yang diunduh (yaitu, file dapat diunduh dalam aliran melalui entri ini).
Menerapkan tindakan unduhan file
Public Class FileDOnTOWNACTICE mengimplementasikan tindakan {// Nilai properti ini ditentukan dalam file konfigurasi. Struts2 akan secara otomatis menyuntikkan (mis., Tetapkan nilai). Anda perlu memberikan metode setter dan getter pribadi inputpath; // Tentukan jalur lengkap file yang akan diunduh (nama path + nama file)/ * * Kelas tindakan yang mengimplementasikan unduhan harus menyediakan metode untuk mengembalikan inputStream instance. Nilai properti inputName yang sesuai di <result ... // inputStream publik getTargetFile () melempar Exception {return servletActionContext.getSerVletContext (). GetResourCeAsstream (inputPath); } // Metode Eksekusi yang Menangani Permintaan Pengguna, yang Mengembalikan String Sukses String Publik Execute () melempar Exception {return "Success"; }}Konfigurasi Tindakan yang sesuai di file Struts.xml
<action name = "download"> <!-Tentukan lokasi sumber daya yang diunduh-> <param name = "inputpath">/unggahfile/demo.txt </param> <!-Konfigurasikan jenis hasil sebagai stream-> <name hasil = "success" type = "stream"> <!-Tentukan jenis file dari file yang diunduh-> <Param name = "stream"> <! File-> <param name = "inputName"> TargetFile </param> <!-Tentukan metode unduhan file yang diunduh dan nama file yang disimpan pada saat diunduh. Nama file saat menyimpan file harus memiliki ekstensi, dan ekstensi menunjukkan ikon dari tipe unduhan-> <param name = "contentDisposition"> lampiran; fileName = struts2.txt </param> <!-Tentukan ukuran buffer dari file yang diunduh-> <param name = "buffersize"> 4096 </param> </hasil/aksi </aksi <param = "bufferSize"> 4096 </param> </result> </result> </hasil/aksi </aksi = "BufferSize"> 4096 </param> </result> </result>
Di atas adalah tiga solusi untuk mengimplementasikan pengunggahan file dan unduh di Java yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!