Mari kita bicara terlebih dahulu tentang prinsip -prinsip mengunggah dan mengunduh instance implementasi Struts2:
Struts 2 diunggah melalui Fileupload File Commons.
Commons Fileupload menggunakan Interceptor Fileupload untuk mengikat file ke instance tindakan dengan menyimpan data HTTP ke folder sementara, dan kemudian Struts menggunakan Interceptor Fileupload. Dengan demikian, kami dapat mengoperasikan file yang diunggah oleh browser dengan cara file lokal.
Implementasi spesifik :
1. Buat halaman index.jsp
<tody> <S: Form Action = "Unggah" Method = "POST" TEMA = "SIMPLA" ENCTYPE = "Multipart/Form-Data"> <Table Align = "Center"> <tr> <td> File Unggah </td> <td id = "lebih"> <s: name = "file"> </td> <td id = "lebih"> <S: File = "file"> </s: file> <td tipe = "ucm"> <s: "File =" file "> </s: file> <td tipe =" nilai "=" Nilai = "file =" file "> </s: file> <td tipe =" nilai "=" Nilai = " </tr><tr> <td><s:submit type="button" value="submit" onclick="return checkf()"/></td> <td><s:reset value="reset "></s:reset></td> </tr></table><table align="center"><tr><td>test.txt</td><td> <a href = "<s: url value = 'download.action'> <s: param name = 'filename'> test.txt </s: param> </s: url>"> unduh </a> </td> </tr> </able> </s: form> </body>
Buat halaman result.jsp
<tody> <S: Form> <Div style = "Border: 1px solid black"> File yang berhasil diunggah: <br> <ul style = "daftar-gaya-tipe: desimal"> <s: nilai iterator = "#request.filename" Id = "status =" status "> <li> <s: properti/Properti/> </li> </s: Ini: form: Ini: ST/ST/ST/STATUS"> <li> <i> <l> <i> <it/uL.
Tentu saja, jangan lupa untuk menambahkan referensi tag struts2 pada setiap halaman < %@taglib awalan = "s" uri = "/struts-tag" %>
2. Buat file updown.js dan referensi di index.jsp
function checkf () {var file = document.geteLementsByName ("file"); if (file [0] .value.length! = 0) {return true; } else {alert ("Silakan pilih file"); mengembalikan false; }} function addmore () {var td = document.geteLementById ("more"); var br = document.createElement ("br"); var input = document.createElement ("input"); var button = document.createElement ("input"); input.type = "file"; input.name = "file"; tombol.type = "tombol"; Button.Value = "Hapus"; button.onClick = function () {td.removechild (br); td.removechild (input); td.removechild (tombol); } td.AppendChild (BR); td.AppendChild (input); TD.AppendChild (tombol); } 3. Buat UpdownloadAction.java
Paket com.action; impor java.io.file; import java.io.fileinputstream; impor java.io.filenotfoundException; impor java.io.fileoutputStream; impor java.io.inputstream; import java.outputStream; impor java.io.inputstream; javax.servlet.http.httpservletRequest; impor com.opensymphony.xwork2.actionsupport; impor org.apache.struts2.servletactionContext; kelas publik updownloadAction memperluas ActionSupport {private static final SerialVersionuid = 1L; Daftar Pribadi <FILE> File; // Sesuai dengan Tag File di JSP Private List <String> FileFileName; // Daftar Privat <String> FileContentType; // Private String FileName; // Dapatkan parameter pram di JSP @SuppressWarnings ("Deprecation") // File Upload Public String UploadFiile () Throwser {) Throws {) String {) Throws {) root {) root unggung {) throws {) throws {) throws {) throws {) throws {) throws {) Film {) ServletActionContext.getSerVletContext (). GetRealPath ("/unggah"); // unggah path system.out.println (root); Inputstream inputstream; File destfile; Outputstream OS; untuk (int i = 0; i <file.size (); i ++) {inputStream = new fileInputStream (file.get (i)); destfile = file baru (root, this.getFileFileName (). get (i)); OS = FileOutputStream baru (destfile); byte [] buffer = byte baru [400]; panjang int = 0; while ((panjang = inputStream.read (buffer))> 0) {os.write (buffer, 0, panjang); } inputStream.close (); os.close (); } HttpservletRequest request = servletActionContext.getRequest (); request.setAttribute ("fileName", fileFileName); Sukses kembali; } // File Unduh Publik InputStream GetDownLoadFile () Melempar FileNotFoundException, UnsupportedencodingException {System.out.println (getFileName ()); // Jika nama file unduhan adalah Cina, lakukan karakter pengkodean karakter servletactionContext.getResponse (). SetHeader ("konten-disposisi", "lampiran; fileName =" + java.net.urlencoder.encode (nama file, "UTF-8")); InputStream inputStream = new fileInputStream ("f:/" // Gunakan jalur absolut untuk mengunduh file "test.txt" dari jalur ini + this.getFileName ()); System.out.println (InputStream); mengembalikan inputstream; } // Unduh public string downloadfile () melempar Exception {return Success; } public String getFileName () melempar UnsupportedEncodingException {return fileName; } public void setFileName (string filename) melempar UnsportedEncodingException {this.fileName = string baru (filename.getbytes ("iso8859-1"), "UTF-8"); }}Catatan: Metode GET dan Set dari atribut telah dihilangkan.
Keempat, akhirnya file konfigurasi
1. Konfigurasi Web.xml
<nilter> <filter-name> struts2 </tiler-name> <nilter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </tilter> <nilter-Mapping> <TERFERTER-NAME> </filter-name> <ruRl-pola>/*</url-pattern> </filter-patping>
2. Konfigurasi Struts.xml
<struts> <constant name="struts.i18n.encoding" value="utf-8"></constant> <constant name="struts.multipart.saveDir" value="f:/"></constant> <package name="struts2" extends="struts-default"> <action name="upload" method="uploadFiile"> <result name = "Success">/jsp/result.jsp </rence> <interceptor-ref name = "Fileupload"> <!-MaximumSize (opsional)-Panjang maksimum file yang diunggah ke tindakan yang diizinkan oleh pencegat ini (dalam unit byte). Perhatikan bahwa parameter ini tidak ada hubungannya dengan properti yang ditentukan dalam webwork.properties. Defaultnya adalah 2MB-> <param name = "MaximumSize"> 409600 </param> <!-Diizinkan Types (Opsional)-Daftar tipe ContentType yang dipisahkan secara koma (seperti teks/html). Daftar ini adalah tipe konten yang diizinkan oleh pencegat ini untuk diteruskan ke tindakan. If not specified, any upload type is allowed.--> <param name="allowedTypes"> text/plain </param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <action name="download" method="downloadFile" > <result name="success" type="stream"> <!--Specify file download type application/octet-stream default value can download all types --> <param name = "contentType"> Aplikasi/txt; </param> <!-Tentukan nama file dan tampilan yang diunduh, tetapi perhatikan kode nama Cina yang kacau. Solusinya adalah: pengkodean pemrosesan-> <!-ContentDisposisi adalah metode pemrosesan pengunduhan file, termasuk inline dan lampiran. Standarnya sejalan. Saat menggunakan lampiran, itu dikonfigurasi sebagai berikut: lampiran; fileName = "nama file". -> <param name = "contentDisposition"> lampiran; fileName = "$ {filename}" </param> <!-Dapatkan inputStream dari getDownLoadFile () Metode-> <param name = "inputName"> </param> <!-Tentukan ukuran cache dari file yang diunduh-> <par name = "Buffers" </Param> <! </packing> </struts>Upload multi-file Struts2 sederhana dan unduhan file tunggal diimplementasikan.
Di atas adalah semua tentang artikel ini, saya harap ini akan membantu untuk pembelajaran semua orang.