Di sebelah artikel sebelumnya:
2. File unggah dan unduh
Tiga trik yang dikembangkan oleh Struts2, Halaman JSP - File Konfigurasi Struts2.xml - dan Tindakan Kelas Tindakan
Prasyarat Unggah File:
Metode bentuk bentuk harus diposting
Enctype dari bentuk bentuk harus multipart/bentuk-data
Berikan bidang input unggah tipe = "file"
Beberapa aturan untuk dukungan struts untuk unggahan file
1. Unggah file tunggal
Langkah Pengembangan:
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/
2) Langkah 2: Write upFile.jsp, dan atur enctype tabel formulir ke: "multipart/form-data", sebagai berikut:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><body> <s:actionerror/> <hr/> <s:fielderror></s:fielderror> <form action="${pageContext.request.contextPath}/upload1.action" method="post" enctype="multipart/form-data"><!-- Passing in MIME--> Username: <input type="text" name="username"/><br/> Beautiful photos: <input type="file" name="photo"/><br/> <input type="submit" value = "unggah"/> </form> </body>Tulis kesalahan halaman kesalahan.jsp
<body> Server sibuk, coba lagi setelah beberapa saat. </body>
Success.jsp
<body> Unggah berhasil </body>
3) Write unggah kelas1: Tambahkan atribut ke kelas tindakan, dan atribut sesuai dengan nama bidang file dalam formulir:
Paket com.itheima.actions; import java.io.file; impor java.io.ioException; impor org.apache.commons.io.fileutils; impor org.apache.struts2.servletaction; foto file pribadi; // konsisten dengan nama bidang unggahan formulir. Jenisnya adalah file private string photofileName; // unggah nama file Private String PhotocontentType; // Unggah File Mime Type // Omit Getter dan Setter Metode Public String Unggah () {System.out.println (PhotofileName+":"+PhotocontentType); // bidang biasa: System.out.println (nama pengguna); // Unggah Bidang: Unggah ke folder. Simpan ke Direktori Gambar Aplikasi String RealPath = ServletActionContext.GetSerVletContext (). GetRealPath ("/Images"); File Directory = File Baru (RealPath); if (! Directory.exists ()) {directory.mkdirs (); } coba {fileutils.copyfile (foto, file baru (direktori, photofileName)); Sukses kembali; } catch (ioException e) {e.printstacktrace (); kesalahan pengembalian; }}}Tambahkan konfigurasi berikut ke file struts.xml
<action name = "unggah1" method = "unggah"> <interceptor-ref name = "defaultstack"> <param name = "fileupload.allowedTypes"> gambar/jpeg, gambar/png </param> <param name = "fileupload.allowedextionsset"> jpg, jpeg, png </png </interceptEntensionsset "> jpg, jpeg, png </png </paramccept. <rances> /success.jsp </result> <result name = "error">/error.jsp </result> <result name = "input">/index.jsp </result> </cich>
Analisis Prinsip:
A. Fileupload Interceptor bertanggung jawab untuk menangani operasi unggahan file. Ini adalah anggota Stack Interceptor Default Default. Interceptor memiliki 3 properti yang dapat diatur.
• Maksimal: Panjang maksimum file yang diunggah (dalam byte), nilai default adalah 2 mb
• Diizinkan Types: Jenis yang memungkinkan pengunggahan file, dipisahkan oleh koma.
• Diizinkan EXTENSIONS: Mengizinkan ekstensi file yang mengunggah. 3 properti ini dapat ditimpa dalam file struts.xml dengan memisahkan koma setiap ekstensi.
B. Mengunggah file yang melebihi ukuran atau secara ilegal akan menyebabkan kesalahan (beralih ke tampilan input)
lulus:
<S: ActionError/> <S: Feilderror/> Tip untuk Menampilkan Pesan Kesalahan
C. Ubah Prompt Pesan Kesalahan ke Versi Cina: Dengan bantuan file sumber daya pesan internasional
Jika kesalahan disebabkan oleh mengkonfigurasi parameter default global, yang terbaik adalah menggunakan file sumber daya pesan global.
File sumber daya prompt default untuk struts2: struts-message.properties file struts2-core-**. Bandingkan saja nilai kunci untuk menimpa nilai yang sesuai.
Konfigurasinya adalah sebagai berikut:
struts.messages.error.uploading = ERROR EADLOADING: {0}
struts.messages.error.file.too.large = file terlalu besar: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = content-type tidak diizinkan: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = File Extension Tidak diizinkan: {0} "{1}" "{2}" {3}
{0}: Nilai atribut nama di <input type = "file" name = "unggah">
{1}: Nama asli file yang diunggah
{2}: Nama file unggahan yang disimpan ke direktori sementara
{3}: Jenis file yang diunggah (untuk struts.messages.error.file.too.large adalah ukuran file yang diunggah)
Kode Sumber:
Ubah informasi file sumber daya yang menampilkan kesalahan
Langkah 1: Buat file sumber daya baru seperti fileuploadmessage.properties, letakkan di bawah SRC untuk menambahkan informasi berikut ke file sumber daya
struts.messages.error.uploading = mengunggah kesalahan: {0}
struts.messages.error.file.too.large = unggah file terlalu besar: {0} "{1}" "{2}" {3}
struts.messages.error.content.type.not.allowed = Jenis file yang diunggah tidak diperbolehkan: {0} "{1}" "{2}" {3}
struts.messages.error.file.extension.not.allowed = nama akhiran file yang diunggah tidak diperbolehkan: {0} "{1}" "{2}" {3}
Langkah 2: Muat file sumber daya di file struts.xml
<!-Mengkonfigurasi file sumber daya untuk informasi kesalahan tentang mengunggah file->
<name konstan = "struts.custom.i18n.resources" value = "cn… .xxx.fileuploadmessage"/>
2. Unggah beberapa file
Unggah beberapa file, Anda dapat menggunakan array atau daftar, dan yang lainnya mirip dengan unggahan file tunggal.
Paket com.itheima.actions; impor java.io.file; impor java.io.ioException; impor org.apache.commons.io.fileutils; impor org.apache.struts2.servletactionContext; unggah com.opensymphony.xwork2.actionsupport; ////unggah file: public class2 file pribadi [] foto; // konsisten dengan nama bidang unggahan formulir. Jenis adalah file type.array atau daftar string pribadi [] photofileName; // unggah nama file private string [] photocontentType; // unggah file mime type public string unggah () {// unggah bidang: unggah ke folder. Simpan ke Direktori Gambar Aplikasi String RealPath = ServletActionContext.GetSerVletContext (). GetRealPath ("/Images"); File Directory = File Baru (RealPath); if (! Directory.exists ()) {directory.mkdirs (); } coba {untuk (int i = 0; i <photo.length; i ++) {fileutils.copyfile (foto [i], file baru (direktori, photofilename [i]))); } mengembalikan kesuksesan; } catch (ioException e) {e.printstacktrace (); kesalahan pengembalian; }}}3. Unduh File
Prinsip: Struts2 menyediakan jenis hasil aliran, yang merupakan jenis hasil aliran yang ditentukan secara khusus digunakan untuk mendukung fungsi unduhan file. Itu membutuhkan parameter inputName untuk ditentukan. Parameter ini menentukan aliran input dan menyediakan entri ke file yang diunduh.
Langkah -langkah pengkodean:
1) Unduh Kelas Tindakan:
Paket com.itheima.Actions; import java.io.file; impor java.io.fileinputStream; import java.io.filenotfoundException; import java.io.inputStream; import java.net.urlencoder; impor org.apache.commons.io.filen org.apache.struts2.servletactionContext; import com.opensymphony.xwork2.actionsupport; Download Class Public memperluas ActionSupport {private inputStream Image; // Gunakan dalam nama file string pribadi dengan masalah; // nama file file ukuran pribadi; inputStream getImage publik () {return image; } public void setImage (gambar inputStream) {this.image = gambar; } public String getFileName () {return fileName; } public long getFileSize () {return filessize; } public String download () melempar Exception {// Tetapkan nilai ke gambar byte stream string filereAlpath = servletActionContext.getSerVletContext (). getRealPath ("/web-inf/class/如 .jpg"); fileName = filenameutils.getname (filerealpath); // Metode 1: File Cina harus dikodekan URL // fileName = urlencoder.encode (nama file, "UTF-8"); fileSize = file baru (filereAlpath) .length (); System.out.println (nama file); gambar = FileInputStream baru (FileReAlPath); Sukses kembali; }}File Konfigurasi Struts.xml: Terutama mengonfigurasi hasil jenis aliran
<struts> <name konstan = "struts.devmode" value = "true" /> <constant name = "struts.ognl.allowstaticmethodaCess" value = "true" /> <action name = "download" Method = "unduh"> <hasil type = "stream" <param name = "inputName"> gambar < /param> <! inputStream-> <param name = "contentType"> Aplikasi/Octet-stream </param> <!-Beri tahu header respons browser, format MIME file, dan hubungi metode getContentType dalam tindakan-> <!-Gunakan ekspresi Ognl di struts.xml untuk mendapatkan nilai properti di kelas aksi. Hubungi getFileName () di kelas Action-> <!-Pengkodean Nama File China: Metode 2. Gunakan ekspresi OGNL untuk memanggil metode statis urlencode-> <!-Panggilan OGNL Default Metode statis tidak dapat dilakukan. Anda perlu menyalakan sakelar konstan.struts.ognl.allowstaticMethoDaccess = true-> <param name = "contentDisposition"> lampiran; fileName = $ {@java.net.urlencoder@encode (file {paxl FILETEZEZEZ/PALF-8 ')} </param> <! </hasilnya> </action> </package> </struts> Interceptor dan file unggah akhir di sini. Ini sangat melelahkan, tetapi penuh pencapaian.
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.