jQuery Uploadify + Apache Fileupload contoh unggahan file asinkron
1. Anda dapat membatasi ukuran dan jenis file yang diunggah. Secara teori, semua jenis file dapat diunggah (Anda dapat mengonfigurasinya sesuai dengan API);
2. Apache commons-fileupload-1.3.1.jar digunakan sebagai perangkat pengunggahan di latar belakang. Contoh ini mendukung pengunggahan beberapa file sekaligus;
3. Direktori unggah file dapat ditentukan secara sewenang-wenang, silakan konfigurasikan di web.xml;
Untuk detail tentang api Uploadify, lihat http://www.uploadify.com/documentation/
FileUploadServlet
Copy kode kodenya sebagai berikut:
paket com.xiaoxing.upload;
impor java.io.File;
impor java.io.IOException;
impor java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
impor java.teks.SimpleDateFormat;
import java.util.Date;
impor java.util.Iterator;
impor java.util.List;
import java.util.UUID;
impor javax.servlet.ServletException;
impor javax.servlet.http.HttpServlet;
impor javax.servlet.http.HttpServletRequest;
impor javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* <h1>Unggahan file Apache Fileupload (2014-5-3)</h1>
* <p>1. Jika Anda tertarik dengan contoh ini dan ingin mengetahui lebih lanjut, selamat bergabung dengan komunitas pembelajaran online Java Private School (329232140)</p>
* <p>2. Contoh ini dapat dipindahkan ke proyek Anda yang sebenarnya dengan sedikit modifikasi. </p>
*/
FileUploadServlet kelas publik memperluas HttpServlet {
serial panjang akhir statis pribadiVersionUID = 7579265950932321867L;
//Setel direktori unggah file default (jika Anda belum mengonfigurasinya di web.xml)
private String uploadDir = "c:/"; //Direktori pengunggahan file
private String tempUploadDir = "c:/"; // Direktori tempat file disimpan sementara (secara otomatis dihapus oleh pendengar setelah sesi dimusnahkan)
/*
* (non-Javadoc)
* @lihat javax.servlet.GenericServlet#init()
* Jika direktori unggah file dikonfigurasi di web.xml, maka akan digunakan terlebih dahulu untuk menentukan apakah direktori file ada. Jika tidak ada, buatlah.
*/
@Mengesampingkan
public void init() melempar ServletException {
// Dapatkan direktori hard disk sebenarnya dimana proyek ini berada
Jalur string = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
jalur = jalur.substring(0, jalur.indexOf("WEB-INF"));
// Tentukan apakah target ada, buatlah jika tidak ada
String uploadDir = path.concat(ini.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(ini.getInitParameter("tempUploadDir"));
Berkas f_uploadDir = Berkas baru(uploadDir);
Berkas f_tempUploadDir = Berkas baru(tempUploadDir);
if (!f_uploadDir.ada()) {
f_uploadDir.mkdirs();
}
jika (!f_tempUploadDir.ada()) {
f_tempUploadDir.mkdirs();
}
//Menetapkan nilai pada variabel
this.uploadDir = uploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (non-Javadoc)
* @lihat javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Jangan menerima data yang dikirimkan dengan metode get dan mengembalikan kode status kegagalan unggahan.
*/
@Mengesampingkan
void doGet yang dilindungi (permintaan HttpServletRequest, respons HttpServletResponse) menampilkan ServletException, IOException {
this.setResponse(respon);
PrintWriter keluar = respon.getWriter();
out.print("{/"error/":/"-1/""); // Metode pengiriman ilegal
}
/*
* (non-Javadoc)
* @lihat javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*Permintaan upload file biasanya dikirimkan melalui POST
*/
@Mengesampingkan
void doPost yang dilindungi (permintaan HttpServletRequest, respons HttpServletResponse) menampilkan ServletException, IOException {
this.setResponse(response); //Mengatur tipe respons untuk penguraian front-end
PrintWriter keluar = respon.getWriter();
Hasil string = "";
mencoba {
// Periksa apakah ini permintaan unggah file
boolean isMultipart = ServletFileUpload.isMultipartContent(permintaan);
jika (adalah Multipart) {
DiskFileItemFactory factory = new DiskFileItemFactory(); // Membuat item file berbasis disk pabrik
factory.setRepository(new File(tempUploadDir)); // Konfigurasikan repositori (saat memastikan lokasi sementara yang aman)
ServletFileUpload upload = new ServletFileUpload(pabrik); // Membuat pengendali unggahan file baru
upload.setSizeMax(1024 * 1024 * 100); // Tetapkan batas ukuran keseluruhan yang diperlukan (disarankan untuk mengatur bagian depan dan belakang secara terpisah, karena plugin yang berbeda digunakan di bagian depan dan belakang)
Daftar<FileItem> item = upload.parseRequest(permintaan); // Parsing permintaan
Iterator<FileItem> iter = items.iterator(); // Memproses item yang diunggah
while (iter.hasNext()) {//Jika beberapa file diunggah sekaligus, file tersebut akan disimpan secara terpisah di sini.
Barang FileItem = iter.next();
if (!item.isFormField()) { // Filter kolom tipe non-file di formulir
if (!"".equals(item.getName())) { // Filter input bertipe non-file
String s_name = item.getName(); // Dapatkan nama file aslinya
int posisi = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // Dapatkan akhiran file
String tanggal = new SimpleDateFormat("yyyyMMdd").format(Tanggal baru());
String s = uploadDir.concat("/").concat(tanggal).concat("/");
//Simpan file dalam direktori berdasarkan tanggal di sini
File sf = File baru;
if (!sf.ada()) {
sf.mkdirs();
}
String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Jalur file = File baru(s_filePath);
item.write(jalur);
hasil += s_filePath.concat(",");
} kalau tidak {
hasil = "";
merusak;
}
}
}
} kalau tidak {
hasil = "";
}
String s_resultJSON = this.jointJSON(result); // Penyambungan mengembalikan JSON front-end
keluar.print(s_resultJSON);
} tangkapan (Pengecualian e) {
e.printStackTrace();
} Akhirnya {
keluar.flush();
keluar.tutup();
}
}
/**
* Sambungkan JSON dan kembalikan nama file dan direktori tanggal dari file yang disimpan ke ujung depan (ujung depan mungkin memerlukan jalur ini untuk menyelesaikan operasi formulir lainnya, seperti menyimpan jalur file ke database)
* @param menghasilkan string format JSON
* @kembali
* @melemparkan UnsupportedEncodingException
*/
private String jointJSON (Hasil string) menampilkan UnsupportedEncodingException {
String str = "";
if(!"".sama dengan(hasil)) {
String rs[] = hasil.split(",");
StringBuffer buffer = new StringBuffer("{/"rows/":[");
for (int i = 0; i < rs.length; i++) {
String s_tmpNama = rs[i];
s_tmpName = s_tmpName.substring(uploadDir.length(), s_tmpName.length());
buffer.append("{/"name/":/"").append(s_tmpName).append("/"},");
}
str = buffer.toString();
str = str.substring(0, str.panjang() - 1).concat("]}");
} kalau tidak {
str = "{/"error/":/"-2/""; //Pengunggahan gagal
}
kembalikan str;
}
/**
* Tetapkan tipe respons ContentType ke "application/x-json"
* @param tanggapan
*/
private void setResponse(Respon HttpServletResponse) {
respon.setCharacterEncoding("UTF-8");
respon.setContentType("aplikasi/json;charset=UTF-8");
respon.setHeader("kontrol cache", "tanpa cache");
}
}
tes_upload.html
Copy kode kodenya sebagai berikut:
<!DOCTYPEhtml>
<html>
<kepala>
<meta charset="UTF-8">
<title>Contoh pengunggahan file asinkron jQuery Uploadify + Apache Fileupload (3-5-2014)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<skrip src="/js/jquery-1.9.0.js"></skrip>
<skrip src="/js/uploadify/jquery.uploadify.min.js"></skrip>
<skrip tipe="teks/javascript">
$(fungsi() {
$('#fileupload').uploadify({
'metode' : 'posting',
'buttonText' : 'file unggahan flash',
'fileSizeLimit' : '1024KB',
'fileTypeExts' : '*.gif; *.jpg;
'swf' : '/js/uploadify/uploadify.swf',
'uploader' : '/upload', //Ini adalah jalur untuk mengunggah gambar, yang merupakan servlet yang saya konfigurasikan di web.xml
'onUploadSuccess' : function(file, data, respon) {//Data yang dikembalikan setelah gambar berhasil diunggah diproses di sini
var ary = eval("(" + data + ")").baris;
for(var i = 0; i < ary.panjang; i++) {
$("#J_div").append("<img alt='gambar' src='/unggah/gambar" + ary[i].nama + "' lebar='200px' tinggi='200px'>");
}
}
});
});
</skrip>
</kepala>
<tubuh>
<h2>Contoh pengunggahan file asinkron jQuery Uploadify + Apache Fileupload (3-5-2014)</h2>
<p>1. Anda dapat membatasi ukuran dan jenis file yang diunggah. Secara teori, semua jenis file dapat diunggah (Anda dapat mengonfigurasinya sesuai dengan API);</p>
<p>2. Apache commons-fileupload-1.3.1.jar digunakan sebagai perangkat pengunggahan di latar belakang
<p>3. Direktori pengunggahan file dapat ditentukan secara sewenang-wenang, silakan konfigurasikan di web.xml;</p>
<p>4. Gambar yang diunggah tidak ditemukan di halaman ini. </p>
<p>Untuk detail tentang api Uploadify, lihat http://www.uploadify.com/documentation/</p>
<p style="color: red">*Jika Anda tertarik dengan contoh ini dan ingin tahu lebih banyak, selamat bergabung dengan komunitas pembelajaran online Java Private School (329232140). </p>
<input id="fileupload" type="file" name="img" multiple="multiple"/>
<div id="J_div"></div>
</tubuh>
</html>
web.xml
Copy kode kodenya sebagai berikut:
<?xml versi="1.0" pengkodean="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http ://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true" versi="3.0">
<daftar-file-selamat datang>
<file-selamat datang>test_upload.html</file-selamat datang>
</daftar-file-selamat datang>
<servlet>
<description>Servlet yang dirancang khusus untuk menangani operasi pengunggahan</description>
<nama-servlet>FileUploadServlet</nama-servlet>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<init-param>
<description>Direktori resmi tempat file disimpan, Anda dapat mengonfigurasinya sendiri</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<init-param>
<deskripsi>Direktori sementara tempat file disimpan dapat dikonfigurasi sendiri. File di dalamnya akan otomatis dihapus oleh pendengar yang dikonfigurasi di bawah. </deskripsi>
<nama-param>tempUploadDir</nama-param>
<param-value>/upload/temp</param-value>
</init-param>
</servlet>
<pemetaan-servlet>
<nama-servlet>FileUploadServlet</nama-servlet>
<url-pattern>/unggah</url-pattern>
</pemetaan-servlet>
<pendengar>
<description>Pembersihan sumber daya file sementara, toolkit sudah disertakan, kita tidak perlu menulisnya</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</pendengar>
</aplikasi web>