jQuery Uploadify + Apache Fileupload exemple de téléchargement de fichier asynchrone
1. Vous pouvez limiter la taille et le type des fichiers téléchargés. En théorie, tout type de fichier peut être téléchargé (vous pouvez le configurer selon l'API) ;
2. Apache commons-fileupload-1.3.1.jar est utilisé comme boîte à outils de téléchargement en arrière-plan. Cet exemple prend en charge plusieurs téléchargements de fichiers en même temps ;
3. Le répertoire de téléchargement de fichiers peut être spécifié arbitrairement, veuillez le configurer dans web.xml ;
Pour plus de détails sur l'API Uploadify, voir http://www.uploadify.com/documentation/
FileUploadServlet
Copiez le code comme suit :
paquet com.xiaoxing.upload ;
importer java.io.File ;
importer java.io.IOException ;
importer java.io.PrintWriter ;
importer java.io.UnsupportedEncodingException ;
importer java.text.SimpleDateFormat ;
importer java.util.Date ;
importer java.util.Iterator ;
importer java.util.List ;
importer java.util.UUID ;
importer javax.servlet.ServletException ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
importer org.apache.commons.fileupload.FileItem ;
importer org.apache.commons.fileupload.disk.DiskFileItemFactory ;
importer org.apache.commons.fileupload.servlet.ServletFileUpload ;
/**
* <h1>Téléchargement du fichier Apache Fileupload (2014-5-3)</h1>
* <p>1. Si cet exemple vous intéresse et souhaitez en savoir plus, n'hésitez pas à rejoindre la communauté d'apprentissage en ligne Java Private School (329232140)</p>
* <p>2. Cet exemple peut être transposé dans votre projet actuel avec des modifications mineures. </p>
*/
la classe publique FileUploadServlet étend HttpServlet {
privé statique final long serialVersionUID = 7579265950932321867L;
//Définissez le répertoire de téléchargement de fichiers par défaut (si vous ne l'avez pas configuré dans web.xml)
private String uploadDir = "c:/" ; //Répertoire de téléchargement de fichiers
private String tempUploadDir = "c:/"; // Le répertoire où les fichiers sont temporairement stockés (automatiquement supprimé par l'écouteur après la destruction de la session)
/*
* (non Javadoc)
* @voir javax.servlet.GenericServlet#init()
* Si le répertoire de téléchargement de fichiers est configuré dans web.xml, il sera utilisé en premier pour déterminer si le répertoire de fichiers existe. S'il n'existe pas, créez-le.
*/
@Outrepasser
public void init() lance ServletException {
// Récupère le véritable répertoire du disque dur où se trouve ce projet
Chemin de chaîne = getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
chemin = chemin.substring(0, chemin.indexOf("WEB-INF"));
// Détermine si la cible existe, crée-la si elle n'existe pas
String uploadDir = path.concat(this.getInitParameter("uploadDir"));
String tempUploadDir = path.concat(this.getInitParameter("tempUploadDir"));
Fichier f_uploadDir = nouveau fichier (uploadDir);
Fichier f_tempUploadDir = new File(tempUploadDir);
si (!f_uploadDir.exists()) {
f_uploadDir.mkdirs();
}
si (!f_tempUploadDir.exists()) {
f_tempUploadDir.mkdirs();
}
// Attribuer une valeur à la variable
this.uploadDir = uploadDir;
this.tempUploadDir = tempUploadDir;
}
/*
* (non Javadoc)
* @voir javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* N'acceptez pas les données soumises par la méthode get et renvoyez le code d'état d'échec du téléchargement.
*/
@Outrepasser
protected void doGet (requête HttpServletRequest, réponse HttpServletResponse) lance ServletException, IOException {
this.setResponse(réponse);
PrintWriter out = réponse.getWriter();
out.print("{/"error/":/"-1/""); // Méthode de soumission illégale
}
/*
* (non Javadoc)
* @voir javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
* Les demandes de téléchargement de fichiers sont généralement soumises via POST
*/
@Outrepasser
protected void doPost (requête HttpServletRequest, réponse HttpServletResponse) lance ServletException, IOException {
this.setResponse(response); //Définir le type de réponse pour l'analyse frontale
PrintWriter out = réponse.getWriter();
Résultat de la chaîne = "" ;
essayer {
// Vérifiez s'il s'agit d'une demande de téléchargement de fichier
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
si (isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory(); // Crée un élément de fichier basé sur le disque d'usine
factory.setRepository(new File(tempUploadDir)); // Configurer le référentiel (en garantissant un emplacement temporaire sûr)
ServletFileUpload upload = new ServletFileUpload(factory); // Créer un nouveau gestionnaire de téléchargement de fichiers
upload.setSizeMax(1024 * 1024 * 100); // Définir la limite de taille globale requise (il est recommandé de définir le front-end et le backend séparément, car différents plug-ins sont utilisés en front-end et en back-end)
List<FileItem> items = upload.parseRequest(request); // Analyser la requête
Iterator<FileItem> iter = items.iterator(); // Traiter les éléments téléchargés
while (iter.hasNext()) { //Si plusieurs fichiers sont téléchargés en même temps, ils seront enregistrés séparément ici.
Élément FileItem = iter.next();
if (!item.isFormField()) { // Filtre les champs non-fichiers du formulaire
if (!"".equals(item.getName())) { // Filtrer l'entrée de type non-fichier
String s_name = item.getName(); // Récupère le nom du fichier d'origine
int position = s_name.lastIndexOf(".");
String s_fileType = s_name.substring(position, s_name.length()); // Récupère le suffixe du fichier
String date = new SimpleDateFormat("aaaaMMjj").format(new Date());
Chaîne s = uploadDir.concat("/").concat(date).concat("/");
//Enregistrez les fichiers dans les répertoires par date ici
Fichier sf = nouveau(x) fichier(s) ;
si (!sf.exists()) {
sf.mkdirs();
}
Chaîne s_filePath = s.concat(UUID.randomUUID().toString()).concat(s_fileType);
Chemin du fichier = nouveau fichier (s_filePath);
item.write(chemin);
résultat += s_filePath.concat(",");
} autre {
résultat = "" ;
casser;
}
}
}
} autre {
résultat = "" ;
}
String s_resultJSON = this.jointJSON(result); // L'épissage renvoie le JSON frontal
out.print(s_resultJSON);
} attraper (Exception e) {
e.printStackTrace();
} enfin {
out.flush();
out.close();
}
}
/**
* Épissez JSON et renvoyez le nom de fichier et le répertoire de date du fichier enregistré au front-end (le front-end peut avoir besoin de ce chemin pour effectuer d'autres opérations de formulaire, telles que le stockage du chemin du fichier dans la base de données)
* @param résultat Chaîne de format JSON
* @retour
* @throwsUnsupportedEncodingException
*/
private String jointJSON (résultat de chaîne) lance UnsupportedEncodingException {
Chaîne str = "" ;
if(!"".equals(result)) {
String rs[] = result.split(",");
StringBuffer buffer = new StringBuffer("{/"rows/":[");
pour (int i = 0; i < rs.length; i++) {
Chaîne 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("]}");
} autre {
str = "{/"error/":/"-2/""; //Échec du téléchargement
}
return str;
}
/**
* Définissez le type de réponse ContentType sur "application/x-json"
* Réponse @param
*/
private void setResponse (réponse HttpServletResponse) {
réponse.setCharacterEncoding("UTF-8");
réponse.setContentType("application/json;charset=UTF-8");
réponse.setHeader("cache-control", "no-cache");
}
}
test_upload.html
Copiez le code comme suit :
<!DOCTYPEhtml>
<html>
<tête>
<méta charset="UTF-8">
<title>JQuery Uploadify + Apache Fileupload exemple de téléchargement de fichier asynchrone (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">
$(fonction() {
$('#fileupload').uploadify({
'méthode' : 'post',
'buttonText' : 'fichier de téléchargement flash',
'fileSizeLimit' : '1024 Ko',
'fileTypeExts' : '*.gif; *.jpg;
'swf' : '/js/uploadify/uploadify.swf',
'uploader' : '/upload', //C'est le chemin pour télécharger les images, qui est le servlet que j'ai configuré dans web.xml
'onUploadSuccess' : function(file, data, réponse) { //Les données renvoyées une fois l'image téléchargée avec succès sont traitées ici
var ary = eval("(" + data + ")").rows;
pour(var i = 0; i < ary.length; i++) {
$("#J_div").append("<img alt='image' src='/upload/images" + ary[i].name + "' width='200px' height='200px'>");
}
}
});
});
</script>
</tête>
<corps>
<h2>Exemple de téléchargement de fichier asynchrone jQuery Uploadify + Apache Fileupload (2014-5-3)</h2>
<p>1. Vous pouvez limiter la taille et le type des fichiers téléchargés. En théorie, tout type de fichier peut être téléchargé (vous pouvez le configurer selon l'API) ;</p>
<p>2. Apache commons-fileupload-1.3.1.jar est utilisé comme boîte à outils de téléchargement en arrière-plan. Cet exemple prend en charge plusieurs téléchargements de fichiers à la fois ;</p>
<p>3. Le répertoire de téléchargement des fichiers peut être spécifié arbitrairement, veuillez le configurer dans web.xml ;</p>
<p>4. Les images téléchargées ne se trouvent pas sur cette page. Cette partie vous est laissée. </p>
<p>Pour plus de détails sur l'API Uploadify, consultez http://www.uploadify.com/documentation/</p>
<p style="color: red">*Si cet exemple vous intéresse et souhaitez en savoir plus, n'hésitez pas à rejoindre la communauté d'apprentissage en ligne Java Private School (329232140). </p>
<input id="fileupload" type="file" name="img" multiple="multiple"/>
<div id="J_div"></div>
</corps>
</html>
web.xml
Copiez le code comme suit :
<?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" 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">
<liste-de-fichiers-de-bienvenue>
<fichier-bienvenue>test_upload.html</fichier-bienvenue>
</welcome-file-list>
<servlet>
<description>Une servlet spécialement conçue pour gérer les opérations de téléchargement</description>
<servlet-name>FileUploadServlet</servlet-name>
<servlet-class>com.xiaoxing.upload.FileUploadServlet</servlet-class>
<param-init>
<description>Le répertoire officiel où sont stockés les fichiers, vous pouvez le configurer vous-même</description>
<param-name>uploadDir</param-name>
<param-value>/upload/images/</param-value>
</init-param>
<param-init>
<description>Le répertoire temporaire où les fichiers sont stockés peut être configuré par vous-même. Les fichiers qu'il contient seront automatiquement supprimés par l'écouteur configuré ci-dessous. </description>
<param-name>tempUploadDir</param-name>
<param-value>/upload/temp</param-value>
</init-param>
</servlet>
<mappage-servlet>
<servlet-name>FileUploadServlet</servlet-name>
<url-pattern>/télécharger</url-pattern>
</servlet-mapping>
<auditeur>
<description>Nettoyage temporaire des ressources des fichiers, la boîte à outils est fournie avec, nous n'avons pas besoin de l'écrire</description>
<listener-class>org.apache.commons.fileupload.servlet.FileCleanerCleanup</listener-class>
</auditeur>
</application-web>