Beispiel für einen asynchronen Datei-Upload mit jQuery Uploadify + Apache Fileupload
1. Sie können die Größe und Art der hochgeladenen Dateien begrenzen. Theoretisch kann jeder Dateityp hochgeladen werden (Sie können ihn entsprechend der API konfigurieren).
2. Apache commons-fileupload-1.3.1.jar wird als Upload-Toolkit im Hintergrund verwendet. Dieses Beispiel unterstützt das gleichzeitige Hochladen mehrerer Dateien.
3. Das Datei-Upload-Verzeichnis kann beliebig angegeben werden. Bitte konfigurieren Sie es in web.xml.
Einzelheiten zur Uploadify-API finden Sie unter http://www.uploadify.com/documentation/
FileUploadServlet
Kopieren Sie den Codecode wie folgt:
Paket com.xiaoxing.upload;
java.io.File importieren;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
java.util.List importieren;
java.util.UUID importieren;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import 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>Apache Fileupload Datei-Upload (2014-5-3)</h1>
* <p>1. Wenn Sie an diesem Beispiel interessiert sind und mehr wissen möchten, sind Sie herzlich willkommen, der Online-Lerngemeinschaft der Java Private School beizutreten (329232140).</p>
* <p>2. Dieses Beispiel kann mit geringfügigen Änderungen auf Ihr tatsächliches Projekt übertragen werden. </p>
*/
öffentliche Klasse FileUploadServlet erweitert HttpServlet {
private static final long serialVersionUID = 7579265950932321867L;
//Legen Sie das Standard-Datei-Upload-Verzeichnis fest (falls Sie es nicht in web.xml konfiguriert haben)
private String uploadDir = "c:/"; //Datei-Upload-Verzeichnis
private String tempUploadDir = "c:/"; // Das Verzeichnis, in dem Dateien vorübergehend gespeichert werden (wird vom Listener automatisch gelöscht, nachdem die Sitzung zerstört wurde)
/*
* (nicht Javadoc)
* @see javax.servlet.GenericServlet#init()
* Wenn das Datei-Upload-Verzeichnis in web.xml konfiguriert ist, wird es zuerst verwendet, um festzustellen, ob das Dateiverzeichnis vorhanden ist. Wenn es nicht existiert, erstellen Sie es.
*/
@Override
public void init() löst eine ServletException { aus
// Holen Sie sich das echte Festplattenverzeichnis, in dem sich dieses Projekt befindet
String path = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
path = path.substring(0, path.indexOf("WEB-INF"));
// Bestimmen Sie, ob das Ziel existiert, und erstellen Sie es, wenn es nicht existiert
String uploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
Datei f_uploadDir = new File(uploadDir);
Datei f_tempUploadDir = new File(tempUploadDir);
if (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
if (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
//Wert der Variablen zuweisen
this.uploadDir = uploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (nicht Javadoc)
* @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Akzeptieren Sie keine mit der Get-Methode übermittelten Daten und geben Sie den Statuscode für den Upload-Fehler zurück.
*/
@Override
protected void doGet(HttpServletRequest-Anfrage, HttpServletResponse-Antwort) wirft ServletException, IOException {
this.setResponse(response);
PrintWriter out = Response.getWriter();
out.print("{/"error/":/"-1/""); // Ungültige Übermittlungsmethode
}
/*
* (nicht Javadoc)
* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
*Anfragen zum Hochladen von Dateien werden normalerweise per POST eingereicht
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse Response) löst ServletException, IOException {
this.setResponse(response); //Legen Sie den Antworttyp für die Front-End-Analyse fest
PrintWriter out = Response.getWriter();
String result = "";
versuchen {
// Überprüfen Sie, ob es sich um eine Datei-Upload-Anfrage handelt
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
DiskFileItemFactory Factory = new DiskFileItemFactory(); // Erstellen Sie ein werkseitiges festplattenbasiertes Dateielement
Factory.setRepository(new File(tempUploadDir)); // Konfigurieren Sie das Repository (bei Gewährleistung eines sicheren temporären Speicherorts)
ServletFileUpload upload = new ServletFileUpload(factory); // Einen neuen Datei-Upload-Handler erstellen
upload.setSizeMax(1024 * 1024 * 100); // Legen Sie die insgesamt erforderliche Größenbeschränkung fest (es wird empfohlen, Front- und Backend separat festzulegen, da im Front- und Backend unterschiedliche Plug-Ins verwendet werden)
List<FileItem> items = upload.parseRequest(request); // Anfrage analysieren
Iterator<FileItem> iter = items.iterator(); // Hochgeladene Elemente verarbeiten
while (iter.hasNext()) { //Wenn mehrere Dateien gleichzeitig hochgeladen werden, werden sie hier separat gespeichert.
FileItem item = iter.next();
if (!item.isFormField()) { // Nicht-Dateityp-Felder im Formular filtern
if (!"".equals(item.getName())) { // Filtern Sie die Eingabe eines Nicht-Dateityps
String s_name = item.getName(); // Den ursprünglichen Dateinamen abrufen
int position = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // Dateisuffix abrufen
String date = new SimpleDateFormat("yyyyMMdd").format(new Date());
String s = uploadDir.concat("/").concat(date).concat("/");
//Speichern Sie hier Dateien in Verzeichnissen nach Datum
Datei sf = neue Datei(en);
if (!sf.exists()) {
sf.mkdirs();
}
String s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Dateipfad = neue Datei(s_filePath);
item.write(path);
Ergebnis += s_filePath.concat(",");
} anders {
result = "";
brechen;
}
}
}
} anders {
result = "";
}
String s_resultJSON = this.jointJSON(result); // Spleißen gibt Front-End-JSON zurück
out.print(s_resultJSON);
} Catch (Ausnahme e) {
e.printStackTrace();
} Endlich {
out.flush();
out.close();
}
}
/**
* Spleißen Sie JSON und geben Sie den Dateinamen und das Datumsverzeichnis der gespeicherten Datei an das Frontend zurück (das Frontend benötigt diesen Pfad möglicherweise, um andere Formularvorgänge abzuschließen, z. B. das Speichern des Dateipfads in der Datenbank).
* @param Ergebnis-JSON-Formatzeichenfolge
* @zurückkehren
* @throws UnsupportedEncodingException
*/
privater String jointJSON (String-Ergebnis) wirft UnsupportedEncodingException {
String str = "";
if(!"".equals(result)) {
String rs[] = result.split(",");
StringBuffer buffer = new StringBuffer("{/"rows/":[");
for (int i = 0; i < rs.length; i++) {
String s_tmpName = 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.length() - 1).concat("]}");
} anders {
str = "{/"error/":/"-2/"" //Upload fehlgeschlagen
}
return str;
}
/**
* Legen Sie den Antworttyp ContentType auf „application/x-json“ fest.
* @param-Antwort
*/
private void setResponse(HttpServletResponse Antwort) {
Response.setCharacterEncoding("UTF-8");
Response.setContentType("application/json;charset=UTF-8");
Response.setHeader("cache-control", "no-cache");
}
}
test_upload.html
Kopieren Sie den Codecode wie folgt:
<!DOCTYPE html>
<html>
<Kopf>
<meta charset="UTF-8">
<title>jQuery Uploadify + Apache Fileupload Beispiel für einen asynchronen Datei-Upload (2014-5-3)</title>
<link rel="stylesheet" type="text/css" href="/js/uploadify/uploadify.css">
<script src="/js/jquery-1.9.0.js"></script>
<script src="/js/uploadify/jquery.uploadify.min.js"></script>
<script type="text/javascript">
$(Funktion() {
$('#fileupload').uploadify({
'Methode': 'Post',
'buttonText': 'Flash-Upload-Datei',
'fileSizeLimit': '1024KB',
'fileTypeExts' : '*.gif; *.jpg',
'swf': '/js/uploadify/uploadify.swf',
'uploader': '/upload', //Dies ist der Pfad zum Hochladen von Bildern, das ist das Servlet, das ich in web.xml konfiguriert habe
'onUploadSuccess': function(file, data, Response) { //Die nach dem erfolgreichen Hochladen des Bildes zurückgegebenen Daten werden hier verarbeitet
var ary = eval("(" + data + ")").rows;
for(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</script>
</head>
<Körper>
<h2>Beispiel für den asynchronen Datei-Upload mit jQuery Uploadify + Apache Fileupload (2014-5-3)</h2>
<p>1. Sie können die Größe und Art der hochgeladenen Dateien begrenzen. Theoretisch kann jeder Dateityp hochgeladen werden (Sie können ihn entsprechend der API konfigurieren).</p>
<p>2. Apache commons-fileupload-1.3.1.jar wird als Upload-Toolkit im Hintergrund verwendet. Dieses Beispiel unterstützt das gleichzeitige Hochladen mehrerer Dateien.</p>
<p>3. Das Datei-Upload-Verzeichnis kann beliebig angegeben werden, bitte konfigurieren Sie es in web.xml;</p>
<p>4. Die hochgeladenen Bilder werden auf dieser Seite nicht gefunden. </p>
<p>Weitere Informationen zur Uploadify-API finden Sie unter http://www.uploadify.com/documentation/</p>
<p style="color: red">*Wenn Sie an diesem Beispiel interessiert sind und mehr wissen möchten, sind Sie herzlich willkommen, der Online-Lerngemeinschaft der Java Private School beizutreten (329232140). </p>
<input id="fileupload" type="file" name="img" multiple="multiple"/>
<div id="J_div"></div>
</body>
</html>
web.xml
Kopieren Sie den Codecode wie folgt:
<?xml version="1.0"kodierung="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" version="3.0">
<Willkommensdateiliste>
<welcome-file>test_upload.html</welcome-file>
</welcome-file-list>
<Servlet>
<description>Ein Servlet, das speziell für die Verarbeitung von Upload-Vorgängen entwickelt wurde</description>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<init-param>
<description>Das offizielle Verzeichnis, in dem Dateien gespeichert werden. Sie können es selbst konfigurieren</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<init-param>
<description>Das temporäre Verzeichnis, in dem Dateien gespeichert werden, können Sie selbst konfigurieren. Die darin enthaltenen Dateien werden vom unten konfigurierten Listener automatisch gelöscht. </description>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</init-param>
</servlet>
<Servlet-Mapping>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/upload</url-pattern>
</servlet-mapping>
<Listener>
<description>Temporäre Dateiressourcenbereinigung, das Toolkit ist im Lieferumfang enthalten, wir müssen es nicht schreiben</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</listener>
</web-app>