Yang pertama adalah bagian halaman web, unggah_file.jsp
<%@ halaman bahasa = "java" gambar = "java.util.*" pageEncoding = "UTF-8"%> <! > <Form Action = "unggahfile" Method = "POST" ENCTYPE = "Multipart /Form-Data"> <!-File Domain-> <input type = "file" name = "source" /< /> input type = " Kirim "value =" unggah "> </form> </body> </html>
Untuk bentuk mengunggah file, Metho harus diatur untuk memposting, dan enctype harus diatur ke multipart/form-data.
Dari kode di atas, Anda dapat melihat bahwa formulir ini diserahkan ke unggahan tindakan ini untuk memprosesnya.
<action name = "unggahfile"> <result name = "success">/unggahResult.jsp </result> <!-fileuploading, yang dapat digunakan untuk membatasi jenis dan ukuran dokumen dokumen unggah-> <internetor- name ref = "Fileupload"> <!-Batasi ukuran file 20m, unitnya byte-> <sem name = "MaximumSize"> 20971520 </param> </sterceptor-ref> <!-Interceptor default harus dinyatakan Setelah Interceptor Fileupload-> <Interceptor-Ref Name = "DefaultStack" />
Fileupload Interceptor digunakan untuk mengatur jalur unggahan untuk membatasi jenis dan ukuran file.
Mengenai ukuran file, tidak mungkin untuk memiliki <param name = "MaximumSize" >> Anda harus menambahkannya di bawah tag <struts>
<name konstan = "struts.multipart.maxsize" value = "21000000"/>/>
Baris kode ini menunjukkan ukuran maksimum ukuran file yang diizinkan untuk mengunggah file di seluruh proyek, artinya, ukuran file tunggal yang diunggah dalam proyek ini tidak dapat melebihi 21000000 byte (sekitar 20m). File yang diizinkan diunggah secara default adalah 2m, jadi ini juga merupakan metode yang melanggar pembatasan file 2m yang hanya dapat mengunggah file 2M.
Mengenai jenis file, jika Anda perlu membatasi sebagai file gambar, Anda dapat mengonfigurasinya seperti ini
<!-Siapkan hanya unggahan file gambar-> <intercepter-ref name = "Fileupload"> <Posm name = "diizinkanTypes"> gambar/bmp, gambar/x-png, gambar/gif, gambar/jpeg < /</param> </stercepter-ref> <interceptor-ref name = "defaultStack" /> />
Nilai dalam label adalah bahwa nilai file adalah tipe MIME, dan tipe MIME dari file umum dapat ditemukan di%tomcat_home%/conf/web.xml.
Jika Anda ingin dibatasi pada file Word, Anda dapat <Terecedor> dikonfigurasi seperti ini
<!-Settling hanya memungkinkan unggahan kata dokumen-> <intercepter-ref name = "fileupload"> <semi name = "diizinkanTypes"> Aplikasi/msword, aplikasi/vnd.openxmlformats -offic edocument.wordprocessingml.document </param> /Intercepter-Ref> <Interceptor-Ref Name = "DefaultStack" />
Namun, saya merasa seperti ini membatasi jenis file, lebih baik menggunakan JavaScript untuk mengimplementasikan pembatasan di ujung depan.
Selanjutnya, tulis unggahan, atribut pribadi yang diperlukan yang diperlukan untuk pengunggahan adalah sumber, yang konsisten dengan atribut nama domain file di unggah_file.js p, yaitu, nilai properti nama domain file adalah sumber, maka harus kami enggan , Selain itu, ada dua atribut pribadi yang lebih penting:
Private String SourceFileName; // Nama file file yang akan diunggah
Private String SourceContentType; // Format dua nama variabel dari jenis file yang akan diunggah adalah sama dengan sumber awalan sebelumnya dan unggah_file.jsp.
Singkatnya, yaitu, misalnya, nama = "ABC" dari domain lapangan Cina di unggah_file.jsp, maka ini perlu didefinisikan dalam aksi tersebut
File private ABC;
ABC akan secara otomatis mendapatkan objek file yang akan diunggah, ABCFileName secara otomatis memperoleh nama file, dan AbccontetType secara otomatis memperoleh jenis file.
Saya harus fokus pada jalur pengunggahan.
Jika diunggah ke jalur absolut, itu cukup bagus, tetapi jika Anda ingin mengunggah ke folder unggahan di direktori root proyek, bagaimana cara mendapatkan jalur lengkap folder unggahan ini?
Saya telah mencoba menggunakan
ServletActionContext.GetSerVletContext ().
Tapi kembali nol. Juga digunakan
ServletactionContext.getRequest ().
Masih kembali ke nol. Tetapi memeriksa masalah ini secara online, banyak orang merekomendasikan tulisan ini, membuktikan bahwa itu mungkin layak dalam beberapa kasus, tetapi ada orang yang kembali ke nol seperti saya. Antarmuka ServiceContextare. Metode spesifiknya adalah sebagai berikut:
Upaya kelas publik memperluas ActionSupport ImvletContextare { / ** * Menghilangkan Kode Lain ... * / Prive ServletContext konteks; Void setSerVletContext (konteks servletContext) {this.context = context;}}
Lalu gunakan
String path = context.getRealPath ("/unggah");
Dapatkan jalur folder unggahan. Kemudian jalankan unggahan:
/*Unggah file ke folder unggah*/file saveful = file baru (path, sourceFileName);
Saya pribadi merekomendasikan metode ini, karena metode ini tampaknya menghindari jalur yang benar ketika proyek dikemas dan ditransfer ke lingkungan lain.
Tempel Kode Lengkap Unggutan di Back Dealaction.java
paket com.lidi.action; Upload Class memperluas ActionSupport ImvletContextare { / ** * / Private Static inl Long ServiceVersionuid = 1L; Jenis File dari Konteks Private ServletContext Private; / File publik getSource () {return source;} public void setSource (sumber file) {this.source = sumber; String GetsourceContentType () {Return SourceContentType;} Public Voidth E (String SourceContentType) {This.SourceContentType = SourceContentType;} @Override Public Void SetservletContext (servicetcontext content) {this .context = context;} Public String Execute () Throws IOEXCEPTION {/ *Path ke file unggah: Project Root Directory Unggul*/string path = Context.getRealPath ("/Upaya"); Folder* / File SaveFile = File baru (Path, SourceFileName);
Unggah hasil hasil halaman unggahResult.jsp
<%@ halaman bahasa = "java" gambar = "java.util.*" pageEncoding = "UTF-8"%> <%@ taglib uri = "/struts-tags" prefix = "s"%> <! Doctype html> <html> <head> <title> unggah hasil </iteme> </head> <body> <p> Nama file: <s: nilai properti = "sourceFileName"/> </p> <p> File Jenis: <S: Nilai properti = "SourceContentType" /> </p> <p> File: <a href = "unggah /<s: nilai properti =" sourceFileName " /"> <s: properti = "lename sumberfi" /> </a> </p> </body> </html>
Di atas adalah semua isi artikel ini.