Struts 2 - Unggahan File
Kerangka Struts 2 menyediakan dukungan bawaan untuk memproses unggahan file menggunakan "Unggahan File berbasis Formulir dalam HTML". Saat file diupload, biasanya file tersebut akan disimpan di direktori sementara dan file tersebut harus diproses atau dipindahkan oleh kelas Action Anda ke direktori permanen untuk memastikan data tidak hilang.
Note - Server mungkin memiliki kebijakan keamanan yang melarang Anda menulis ke direktori selain direktori sementara dan direktori milik aplikasi web Anda.
Mengunggah file di Struts dimungkinkan melalui interseptor yang telah ditentukan sebelumnya yang disebut FileUpload interceptor yang tersedia melalui kelas org.apache.struts2.interceptor.FileUploadInterceptor dan disertakan sebagai bagian daridefaultStack. Anda masih bisa menggunakannya di struts.xml Anda untuk mengatur berbagai parameter seperti yang akan kita lihat di bawah.
Buat Lihat File
Mari kita mulai dengan membuat tampilan yang akan dibutuhkan untuk menelusuri dan mengunggah file yang dipilih. Jadi mari kita buat fileindex.jsp dengan formulir unggahan HTML biasa yang memungkinkan pengguna mengunggah file -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action = "upload" method = "post" enctype = "multipart/form-data">
<label for = "myFile">Upload your file</label>
<input type = "file" name = "myFile" />
<input type = "submit" value = "Upload"/>
</form>
</body>
</html>
Ada beberapa hal yang perlu diperhatikan dalam contoh di atas. Pertama, enctype formulir diatur kemultipart/form-data. Ini harus disetel agar unggahan file berhasil ditangani oleh pencegat unggahan file. Poin berikutnya yang diperhatikan adalah metode tindakan formulirupload dan nama bidang unggahan file - yaitu myFile. Kami membutuhkan informasi ini untuk membuat metode aksi dan konfigurasi struts.
Selanjutnya, mari kita buat file jsp sederhana success.jsp untuk menampilkan hasil unggahan file kami jika berhasil.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Success</title>
</head>
<body>
You have successfully uploaded <s:property value = "myFileFileName"/>
</body>
</html>
Berikut akan menjadi file hasil error.jsp seandainya ada kesalahan dalam mengunggah file -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Error</title>
</head>
<body>
There has been an error in uploading the file.
</body>
</html>
Buat Kelas Aksi
Selanjutnya, mari kita buat kelas Java bernama uploadFile.java yang akan mengurus pengunggahan file dan menyimpan file itu di lokasi yang aman -
package com.tutorialspoint.struts2;
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
public class uploadFile extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
private String destPath;
public String execute() {
/* Copy file to a safe location */
destPath = "C:/apache-tomcat-6.0.33/work/";
try {
System.out.println("Src File name: " + myFile);
System.out.println("Dst File name: " + myFileFileName);
File destFile = new File(destPath, myFileFileName);
FileUtils.copyFile(myFile, destFile);
} catch(IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
Itu uploadFile.javaadalah kelas yang sangat sederhana. Hal penting yang perlu diperhatikan adalah bahwa interseptor FileUpload bersama dengan Parameters Interceptor melakukan semua tugas berat untuk kami.
Pencegat FileUpload membuat tiga parameter tersedia untuk Anda secara default. Mereka diberi nama dalam pola berikut -
[your file name parameter] - Ini adalah file sebenarnya yang telah diunggah oleh pengguna. Dalam contoh ini, ini akan menjadi "myFile"
[your file name parameter]ContentType- Ini adalah jenis konten file yang diunggah. Dalam contoh ini, ini akan menjadi "myFileContentType"
[your file name parameter]FileName- Ini adalah nama file yang diunggah. Dalam contoh ini, ini akan menjadi "myFileFileName"
Tiga parameter tersedia untuk kami, berkat Struts Interceptors. Yang harus kita lakukan adalah membuat tiga parameter dengan nama yang benar di kelas Action kita dan secara otomatis variabel ini terhubung secara otomatis untuk kita. Jadi, dalam contoh di atas, kami memiliki tiga parameter dan metode tindakan yang hanya mengembalikan "berhasil" jika semuanya berjalan dengan baik jika tidak, ia mengembalikan "kesalahan".
File Konfigurasi
Berikut adalah properti konfigurasi Struts2 yang mengontrol proses pengunggahan file -
Sr Tidak | Properti & Deskripsi |
---|---|
1 | struts.multipart.maxSize Ukuran maksimum (dalam byte) file yang akan diterima sebagai file yang diunggah. Default-nya adalah 250 juta. |
2 | struts.multipart.parser Perpustakaan digunakan untuk mengunggah formulir multi bagian. Secara default adalahjakarta |
3 | struts.multipart.saveDir Lokasi untuk menyimpan file sementara. Secara default adalah javax.servlet.context.tempdir. |
Untuk mengubah pengaturan ini, Anda dapat menggunakan constant tag di file struts.xml aplikasi Anda, seperti yang saya lakukan untuk mengubah ukuran maksimum file yang akan diunggah.
Mari kita miliki struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<constant name = "struts.multipart.maxSize" value = "1000000" />
<package name = "helloworld" extends = "struts-default">
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
Sejak, FileUploadinterseptor adalah bagian dari Stack default interseptor, kita tidak perlu mengkonfigurasinya secara eksplisit. Tapi, Anda bisa menambahkan tag <interceptor-ref> di dalam <action>. Pencegat fileUpload membutuhkan dua parameter(a) maximumSize dan (b) allowedTypes.
Parameter maximumSize mengatur ukuran file maksimum yang diperbolehkan (defaultnya kira-kira 2MB). Parameter allowTypes adalah daftar jenis konten diterima (MIME) yang dipisahkan koma seperti yang ditunjukkan di bawah ini -
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<interceptor-ref name = "basicStack">
<interceptor-ref name = "fileUpload">
<param name = "allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/upload.jsp. Ini akan menghasilkan layar berikut -
Sekarang pilih file "Contacts.txt" menggunakan tombol Browse dan klik tombol upload yang akan mengupload file pada servis Anda dan Anda akan melihat halaman berikutnya. Anda dapat memeriksa file yang diunggah harus disimpan di C: \ apache-tomcat-6.0.33 \ work.
Perhatikan bahwa FileUpload Interceptor menghapus file yang diunggah secara otomatis sehingga Anda harus menyimpan file yang diunggah secara terprogram di beberapa lokasi sebelum dihapus.
Pesan Kesalahan
Pencegat fileUplaod menggunakan beberapa kunci pesan kesalahan default -
Sr Tidak | Kunci & Deskripsi Pesan Kesalahan |
---|---|
1 | struts.messages.error.uploading Kesalahan umum yang terjadi ketika file tidak dapat diunggah. |
2 | struts.messages.error.file.too.large Terjadi jika file yang diunggah terlalu besar seperti yang ditentukan oleh maximumSize. |
3 | struts.messages.error.content.type.not.allowed Terjadi ketika file yang diunggah tidak cocok dengan jenis konten yang diharapkan yang ditentukan. |
Anda dapat mengganti teks pesan-pesan ini di WebContent/WEB-INF/classes/messages.properties file sumber daya.