Simulasikan upload file tunggal dengan 2 cara, efeknya sebagai berikut
Langkah-langkah pengembangannya adalah sebagai berikut:
1. Buat proyek web baru dan impor toples yang diperlukan untuk mengunggah file struts2, seperti yang ditunjukkan di bawah ini
Struktur direktori
2. Buat Aksi baru
cara pertama
Copy kode kodenya sebagai berikut:
paket com.ljq.action;
impor java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
impor com.opensymphony.xwork2.ActionContext;
impor com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
kelas publik UploadAction memperluas ActionSupport{
File gambar pribadi; //file yang diunggah
pribadi String imageFileName; //Nama file
pribadi String imageContentType; //Jenis file
public String mengeksekusi() melempar Pengecualian {
String realpath = ServletActionContext.getServletContext().getRealPath("/gambar");
//D:/Apache-Tomcat-6.0.18/webapps/struts2_upload/images
System.out.println("jalur nyata: "+jalur nyata);
jika (gambar != null) {
File savefile = File baru(File baru(realpath), imageFileName);
jika (!savefile.getParentFile().exists())
simpanfile.getParentFile().mkdirs();
FileUtils.copyFile(gambar, simpanfile);
ActionContext.getContext().put("pesan", "File berhasil diunggah");
}
kembalikan "sukses";
}
File publik getImage() {
mengembalikan gambar;
}
public void setImage(Gambar file) {
this.gambar = gambar;
}
String publik getImageFileName() {
kembalikan imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = namafilegambar;
}
String publik getImageContentType() {
kembalikan imageContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
}
Cara kedua
Copy kode kodenya sebagai berikut:
paket com.ljq.action;
impor java.io.File;
impor java.io.FileInputStream;
impor java.io.FileOutputStream;
impor java.io.IOException;
import org.apache.struts2.ServletActionContext;
impor com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
kelas publik UploadAction2 memperluas ActionSupport {
//Enkapsulasi atribut domain file yang diunggah
gambar File pribadi;
//Enkapsulasi atribut tipe file yang diunggah
String pribadi imageContentType;
//Enkapsulasi atribut nama file yang diunggah
String pribadi namafile gambar;
//Terima properti injeksi ketergantungan
penyimpanan String pribadi;
@Mengesampingkan
eksekusi String publik() {
FileOutputStream fos = null;
FileInputStream fis = null;
mencoba {
//Buat aliran keluaran file
Sistem.keluar.println(getSavePath());
fos = FileOutputStream baru(getSavePath() + "//" + getImageFileName());
//Buat aliran unggahan file
fis = FileInputStream baru(getImage());
byte[] penyangga = byte baru[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
} tangkapan (Pengecualian e) {
System.out.println("Gagal mengunggah file");
e.printStackTrace();
} Akhirnya {
tutup(fos, fis);
}
kembali SUKSES;
}
/**
* Kembali ke lokasi penyimpanan file yang diunggah
*
* @kembali
*/
String publik getSavePath() memunculkan Pengecualian{
kembalikan ServletActionContext.getServletContext().getRealPath(savePath);
}
public void setSavePath(String simpanPath) {
ini.savePath = simpanPath;
}
File publik getImage() {
mengembalikan gambar;
}
public void setImage(Gambar file) {
this.gambar = gambar;
}
String publik getImageContentType() {
kembalikan imageContentType;
}
public void setImageContentType(String imageContentType) {
this.imageContentType = imageContentType;
}
String publik getImageFileName() {
kembalikan imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = namafilegambar;
}
private void close(FileOutputStream fos, FileInputStream fis) {
jika (fis != null) {
mencoba {
fis.close();
} tangkapan (IOException e) {
System.out.println("FileInputStream gagal ditutup");
e.printStackTrace();
}
}
jika (fos != nol) {
mencoba {
fos.close();
} tangkapan (IOException e) {
System.out.println("FileOutputStream gagal ditutup");
e.printStackTrace();
}
}
}
}
file konfigurasi struts.xml
Copy kode kodenya sebagai berikut:
<?xml versi="1.0" pengkodean="UTF-8" ?>
<!DOCTYPE penyangga PUBLIC
"-//Apache Software Foundation//Konfigurasi DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<penopang>
<!-- Atribut ini menentukan akhiran permintaan yang perlu diproses oleh Struts2. Nilai default atribut ini adalah tindakan, yaitu semua permintaan yang cocok dengan *.action diproses oleh Struts2.
Jika pengguna perlu menentukan beberapa sufiks permintaan, pisahkan beberapa sufiks tersebut dengan koma (,). -->
<nama konstan = "struts.action.extension" nilai = "lakukan" />
<!-- Mengatur apakah browser menyimpan konten statis dalam cache. Nilai defaultnya benar (digunakan dalam lingkungan produksi). Yang terbaik adalah mematikannya selama tahap pengembangan -->
<nama konstan="struts.serve.static.browserCache" value="false" />
<!-- Ketika file konfigurasi struts diubah, apakah sistem akan memuat ulang file secara otomatis, nilai defaultnya adalah false (digunakan dalam lingkungan produksi), yang terbaik adalah mengaktifkannya selama tahap pengembangan -->
<nama konstan="struts.configuration.xml.reload" value="true" />
<!-- Digunakan dalam mode pengembangan, sehingga pesan kesalahan yang lebih detail dapat dicetak -->
<nama konstan = "struts.devMode" nilai = "benar" />
<!--Tema tampilan default-->
<nama konstan="struts.ui.theme" value="sederhana" />
<!--<nama konstan="struts.objectFactory" value="spring" />-->
<!--Solusi untuk kode yang kacau-->
<nama konstan="struts.i18n.encoding" value="UTF-8" />
<!-- Tentukan jumlah byte maksimum yang diperbolehkan untuk file yang diunggah. Nilai defaultnya adalah 2097152(2M) -->
<nama konstan="struts.multipart.maxSize" value="10701096"/>
<!-- Atur folder sementara untuk file yang diunggah, javax.servlet.context.tempdir digunakan secara default -->
<nama konstan="struts.multipart.saveDir " value="d:/tmp" />
<nama paket="upload" namespace="/upload" extends="struts-default">
<nama tindakan="*_upload" metode="{1}">
<result name="success">/WEB-INF/page/message.jsp</result>
</aksi>
</paket>
<nama paket="upload2" extends="struts-default">
<nama tindakan="upload2" metode="eksekusi">
<!-- Tetapkan nilai atribut savePath --> secara dinamis
<param name="savePath">/gambar</param>
<result name="success">/WEB-INF/page/message.jsp</result>
<nama hasil="input">/upload/upload.jsp</result>
<interceptor-ref nama="fileUpload">
<!-- Pemfilteran file -->
<param name="allowedTypes">gambar/bmp,gambar/png,gambar/gif,gambar/jpeg</param>
<!-- Ukuran file, dalam byte -->
<param name="maximumSize">1025956</param>
</interseptor-ref>
<!-- Pencegat default harus ditempatkan setelah fileUpload, jika tidak maka tidak valid -->
<interceptor-ref nama = "defaultStack" />
</aksi>
</paket>
</penopang>
Unggah halaman formulir
Copy kode kodenya sebagai berikut:
<%@ halaman bahasa="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" awalan="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transisi//EN">
<html>
<kepala>
<title>Unggah file</title>
<meta http-equiv="pragma" content="tanpa-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="kedaluwarsa" content="0">
</kepala>
<tubuh>
<!-- ${pageContext.request.contextPath}/upload/execute_upload.do -->
<!-- ${pageContext.request.contextPath}/upload2/upload2.do -->
<form action="${pageContext.request.contextPath}/upload2/upload2.do"
enctype="multipart/form-data" metode="post">
Berkas:<input type="file" name="image">
<input type="kirim" value="Unggah" />
</bentuk>
<br/>
<s:kesalahan lapangan />
</tubuh>
</html>
Tampilkan halaman hasil
Copy kode kodenya sebagai berikut:
<%@ halaman bahasa="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" awalan="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transisi//EN">
<html>
<kepala>
<title>Upload berhasil</title>
<meta http-equiv="pragma" content="tanpa-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="kedaluwarsa" content="0">
</kepala>
<tubuh>
Unggahan berhasil!
<br/><br/>
<!-- ${pageContext.request.contextPath} jalur penerapan kucing jantan,
Misalnya: D:/apache-Tomcat-6.0.18/webapps/struts2_upload/ -->
<img src="${pageContext.request.contextPath}/<s:property value="'images/'+imageFileName"/>">
<s:debug></s:debug>
</tubuh>
</html>