Saat bekerja dalam sistem B/S, biasanya melibatkan pengunggahan file dan mengunduh file. Sebelum kami terhubung ke Framework Struts2, kami menggunakan komponen Fileupload dari Subproyject Commons di bawah Apache untuk mengunggah file. Namun, jika kita melakukan itu, kodenya terlihat rumit dan tidak fleksibel. Setelah belajar Struts2, Struts2 menyediakan mekanisme implementasi yang lebih baik untuk mengunggah dan mengunduh file. Di sini saya akan menjelaskan kode sumber untuk unggahan file tunggal dan unggahan multi-file. Di sini kita perlu mengimpor dua file jar yang diunggah dengan unduhan file, satu adalah commons-fileupload-1.2.2.jar, dan yang lainnya adalah commons-io-2.0.1.jar.
Unggah file tunggal Struts2:
Pertama -tama, ada halaman Upload File JSP. Ini relatif sederhana, ini adalah formulir dengan kotak unggahan file.
<!-Saat mengunggah file, metode pengiriman formulir harus diposting, karena file biner mungkin sangat besar saat mengunggah file. Ada juga atribut enctype. This attribute must be written as multipart/form-data, otherwise it will be uploaded to the server in binary text--> <form action="fileUpload.action" method="post" enctype="multipart/form-data"> username: <input type="text" name="username"><br> file: <input type="file" name="file"><br> <input type="submit" value = "Kirim"> </form>
Berikutnya adalah bagian fileuploadaction dari kode. Karena Struts2 menyediakan mekanisme magang yang baik untuk mengunggah dan mengunduh, kita hanya perlu menulis kode yang sangat sedikit dalam tindakan:
FileuploadAction kelas publik memperluas ActionSupport {Private String UserName; // Perhatikan bahwa file tidak merujuk ke file itu sendiri yang diunggah oleh jsp front-end, tetapi file yang diunggah untuk menyimpannya di bawah file file privat folder sementara; // Nama file yang dikirimkan string pribadi fileFileName; // Jenis MIME dari file yang dikirimkan string pribadi FileContentType; string publik getUserName () {return username; } public void setusername (string username) {this.username = username; } file publik getFile () {return file; } public void setFile (file file) {this.file = file; } public String getFileFileName () {return fileFileName; } public void setFileFileName (String filefileName) {this.fileFileName = filefileName; } public String getFileContentType () {return filecontentType; } public void setFileContentType (String FileContentType) {this.fileContentType = filecontentType; } @Override Public String execute () melempar Exception {String root = servletActionContext.getSerVletContext (). GetRealPath ("/unggah"); InputStream adalah = FileInputStream baru (file); OutputStream os = new fileoutputStream (file baru (root, filefileName)); System.out.println ("FileFileName:" + FilefileName); // Karena file adalah file yang disimpan dalam folder sementara, kami dapat mencetak nama file dan jalur file untuk melihat apakah itu sama dengan sistem fileFileName sebelumnya.out.println ("File:" + file.getName ()); System.out.println ("File:" + File.getPath ()); byte [] buffer = byte baru [500]; panjang int = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); Sukses kembali; }}Pertama -tama, kita harus jelas bahwa file di sini tidak benar -benar merujuk pada file yang diunggah oleh JSP. Ketika file diunggah, Struts2 akan terlebih dahulu mencari lokasi penyimpanan yang ditentukan oleh struts.multipart.savedir (ini di default.properties). Kami dapat membuat file properti Struts.Properties baru untuk menentukan lokasi penyimpanan file sementara. Jika tidak ditentukan, file akan disimpan di Apache-Tomcat-7.0.29 Tomcat/Work/Catalina/LocalHost/Direktori. Kemudian kami dapat menentukan lokasi penyimpanan setelah mengunggah file, dan hanya menulisnya ke aliran melalui aliran output. Pada saat ini, kami dapat melihat file yang kami unggah di folder.
Setelah mengunggah file, kami masih perlu mengunduhnya. Bahkan, prinsip mengunduh Struts2 sangat sederhana. Ini untuk menentukan aliran input dan kemudian menulis file ke dalam aliran input. Konfigurasi kunci masih mengonfigurasinya di file konfigurasi struts.xml:
Kode FILEDOWNLOADACTION adalah sebagai berikut:
Public Class FileDOWNLOADACTICE Memperluas ActionSupport {public InputStream getDownloadFile () {return servletActionContext.getSerVletContext (). getResourCeAsstream ("Upload/Buku Alamat 4 September 2012.xls"); } @Override Public String execute () melempar Exception {return Success; }}Mari kita lihat bahwa tindakan ini hanya mendefinisikan aliran input dan kemudian menyediakannya dengan metode Getter. Selanjutnya, mari kita lihat file konfigurasi struts.xml:
<action name = "fileDownload"> <result name = "success" type = "stream"> <param name = "contentDisposition"> lampiran; fileName = "Buku alamat 4 September 2012.xls" </param> <param name = "inputName"> Unduh </param> </rence> </action>
Ada beberapa hal yang perlu kita perhatikan dalam file konfigurasi struts.xml. Pertama -tama, jenis hasilnya. Di masa lalu, kami mendefinisikan suatu tindakan. Kami pada dasarnya tidak menulis atribut tipe dalam hasilnya, karena default untuk meminta penerusan (dispatcher). Selain atribut ini, umumnya ada nilai -nilai seperti pengalihan (pengalihan). Di sini, karena kami menggunakan unduhan file, jenisnya harus didefinisikan sebagai jenis aliran, memberi tahu tindakannya. Ini adalah hasil dari unduhan file. Umumnya ada sub-elemen param dalam elemen hasil. Ini digunakan untuk mengatur parameter saat mengunduh file. E Properti ini adalah untuk mendapatkan aliran input file beraksi. Nama harus sama dengan atribut aliran input dalam tindakan. Maka atribut ContentDisposition adalah atribut ContentDisposition. Properti ini umumnya digunakan untuk menentukan bagaimana kami ingin memproses file yang diunduh. Jika nilainya lampiran, kotak unduhan akan muncul, memungkinkan pengguna untuk memilih apakah akan mengunduh. Jika nilai ini tidak ditetapkan, browser akan terlebih dahulu memeriksa apakah akan membuka file yang diunduh. Jika bisa, itu akan langsung membuka file yang diunduh (tentu saja, ini bukan yang kita butuhkan). Nilai lain adalah nama file, yang merupakan nama unduhan file yang diminta oleh file saat mengunduh. Setelah mengkonfigurasi informasi ini, kami dapat mengimplementasikan fungsi unduhan file.
Struts2 Multiple Files Unggah :
Faktanya, prinsip unggahan multi-file sama dengan unggahan file tunggal. Upload satu file adalah satu file, dan daftar <prand> koleksi atau array file [] diunggah. Pertama, mari kita lihat kode bagian JSP front-end. Di sini saya menggunakan jQuery untuk mengimplementasikan penambahan file dinamis dan kotak unduhan hapus dinamis:
<type script = "Text/JavaScript" src = "Script/jQuery-1.8.1.js"> </script> <script type = "text/javascript"> $ (function () {$ ("#tombol"). Klik () {var html = $ ("<input type = 'file' name = ''> '>; value = 'delete'> <br> "); $ ("#body div "). append (html) .append (tombol); tombol.click (function () {html.remove (); tombol enctype="multipart/form-data"> username: <input type="text" name="username"><br> file: <input type="file" name="file"> <input type="button" value="add" id="button"><br> <div></div> <input type="submit" value="submit"> </form> </body> Nama file harus dinamai file, dan kemudian kode tindakan untuk mengunggah beberapa file adalah sebagai berikut:
kelas publik fileuploadaction2 memperluas ActionSupport {private string username; // Di sini kami menggunakan daftar untuk menyimpan file yang diunggah. File juga mengacu pada file sementara di folder sementara, daripada file Private List <File> file yang benar -benar diunggah; // Daftar ini menyimpan nama file, sesuai dengan file dalam Daftar <FILE> DAFTAR PRIBADI <String> FileFileName; Daftar Pribadi <String> FileContentType; string publik getUserName () {return username; } public void setusername (string username) {this.username = username; } Daftar Publik <FILE> getFile () {return file; } public void setFile (Daftar <FILE> file) {this.file = file; } Daftar Publik <String> getFileFileName () {return fileFileName; } public void setFileFileName (Daftar <String> fileFileName) {this.fileFileName = filefileName; } Daftar Publik <String> getFileContentType () {return filecontentType; } public void setFileContentType (Daftar <String> filecontentType) {this.fileContentType = filecontentType; } @Override Public String execute () melempar Exception {String root = servletActionContext.getSerVletContext (). GetRealPath ("/unggah"); untuk (int i = 0; i <file.size (); i ++) {inputStream adalah = FileInputStream baru (file.get (i)); OutputStream os = new fileoutputStream (file baru (root, filefileName.get (i))); byte [] buffer = byte baru [500]; @SuppressWarnings ("tidak digunakan") int panjang = 0; while (-1! = (length = is.read (buffer, 0, buffer.length))) {os.write (buffer); } os.close (); is.close (); } mengembalikan kesuksesan; }}Ini juga menulisnya ke dalam aliran output, sehingga kita dapat melihat beberapa file yang diunggah di folder
Unduhan file berikutnya persis sama dengan unduhan file sekarang, dan hal yang sama adalah struts.xml, jadi saya tidak akan mengulanginya di sini.
Ringkasan: Secara umum, mekanisme unggahan dan unduhan file yang disediakan oleh Struts2 menyederhanakan banyak kode kami. Kita dapat menggunakan mekanisme ini dalam proyek -proyek mendatang. Kami juga dapat menggunakan komponen Fileupload untuk mengunggah file. Ini semua ditentukan oleh preferensi pribadi!
Hanya ada begitu banyak konten tentang unggahan file dan fungsi unduhan di Javaweb, terima kasih atas bacaan Anda.