Maison interface Web js tutoriel Implémentation du travail Web pour le téléchargement de fichiers et le code de téléchargement Explication détaillée_Compétences Javascript

Implémentation du travail Web pour le téléchargement de fichiers et le code de téléchargement Explication détaillée_Compétences Javascript

May 16, 2016 pm 03:16 PM
文件上传 文件下载

Cet article présente principalement la connaissance du téléchargement et du téléchargement de fichiers Webwork sous trois aspects, dont les trois aspects suivants :

1. Demande de demande d'emballage
2. Obtenez la classe d'analyse pour le téléchargement de fichiers
3. Configuration et utilisation réelle du projet

Le téléchargement et le téléchargement sur le Web devraient être une exigence très courante, qu'il s'agisse d'un petit site Web ou d'un site Web de trading avec un accès simultané important. Bien entendu, WebWork fournit également un intercepteur très convivial pour implémenter le téléchargement de fichiers, nous permettant de nous concentrer sur la conception et la mise en œuvre de la logique métier. Lors de la mise en œuvre du téléchargement et du téléchargement, nous prêtons également attention à la mise en œuvre du téléchargement et du téléchargement du framework.

1. Demande de demande d'emballage

•Chaque fois que le client demande une action, la méthode ServletDispatcher.service() de la classe de répartition WebWork sera appelée.

Pour le processus spécifique, veuillez vous référer à : Explication détaillée de la méthode d'appel d'Action dans Webwork

public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException {
try {
if (encoding != null) {
try {
request.setCharacterEncoding(encoding);
} catch (Exception localException) {
}
}
if (locale != null) {
response.setLocale(locale);
}
if (this.paramsWorkaroundEnabled) {
request.getParameter("foo");
}
request = wrapRequest(request); //封装 request请求
serviceAction(request, response, getNameSpace(request), getActionName(request), getRequestMap(request), getParameterMap(request), getSessionMap(request), getApplicationMap());
} catch (IOException e) {
String message = "Could not wrap servlet request with MultipartRequestWrapper!";
log.error(message, e);
sendError(request, response, 500, new ServletException(message, e));
}
} 
Copier après la connexion

Voyons d’abord ce que fait la méthode wrapRequest :

protected HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException {
if ((request instanceof MultiPartRequestWrapper)) {
return request;
}
if (MultiPartRequest.isMultiPart(request)) {
request = new MultiPartRequestWrapper(request, getSaveDir(), getMaxSize());
}
return request;
}
Copier après la connexion

• Tout d'abord, il détermine si la requête entrante a été encapsulée par MultiPartRequestWrapper. Si c'est le cas, elle renvoie directement.
• Sinon, déterminez si le ContentType dans les informations d'en-tête de la demande est une demande de paramètre multi-type (multipart/formdata). Si tel est le cas, enveloppez la demande dans le propre type MultiPartRequestWrapper de WebWork, qui hérite de HttpServletRequestWrapper.

La méthode MultiPartRequest.isMultiPart() est implémentée comme suit :

public static boolean isMultiPart(HttpServletRequest request){
String content_type = request.getHeader("Content-Type");
return content_type != null && content_type.startsWith("multipart/form-data");
}
Copier après la connexion

•La configuration du répertoire de stockage temporaire des fichiers et de la taille maximale de téléchargement dans webwork.properties entre en jeu à ce moment-là.
•Les paramètres passés lors de la création de l'objet MultiPartRequestWrapper sont obtenus par les méthodes getSaveDir() et getMaxSize().
•Dans la méthode, les attributs webwork.multipart.saveDir et webwork.multipart.maxSize dans la configuration seront recherchés. S'ils sont trouvés, le répertoire temporaire spécifié par l'attribut et le contenu maximum téléchargé seront utilisés. Le répertoire de l'environnement sera utilisé.

La mise en œuvre spécifique est la suivante :

protected String getSaveDir() {
String saveDir = Configuration.getString("webwork.multipart.saveDir").trim();
if (saveDir.equals("")) {
File tempdir = (File) getServletConfig().getServletContext().getAttribute("javax.servlet.context.tempdir");
log.info("Unable to find 'webwork.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir");
if (tempdir != null) {
saveDir = tempdir.toString();
}
} else {
File multipartSaveDir = new File(saveDir);
if (!multipartSaveDir.exists()) {
multipartSaveDir.mkdir();
}
}
if (log.isDebugEnabled()) {
log.debug("saveDir=" + saveDir);
}
return saveDir;
}
Copier après la connexion

2. Obtenez la classe d'analyse pour le téléchargement de fichiers

Voyons comment le constructeur de MultiPartRequestWrapper encapsule la requête :

public MultiPartRequestWrapper(HttpServletRequest request, String saveDir, int maxSize) throws IOException {
super(request);
if ((request instanceof MultiPartRequest)) {
this.multi = ((MultiPartRequest) request);
} else {
String parser = "";
parser = Configuration.getString("webwork.multipart.parser");
if (parser.equals("")) {
log.warn("Property webwork.multipart.parser not set. Using com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest");
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
} else if (parser.equals("pell")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest";
} else if (parser.equals("cos")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest";
} else if (parser.equals("jakarta")) {
parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest";
}
try {
Class baseClazz = MultiPartRequest.class;
Class clazz = Class.forName(parser);
if (!baseClazz.isAssignableFrom(clazz)) {
addError("Class '" + parser + "' does not extend MultiPartRequest");
return;
}
Constructor ctor = clazz.getDeclaredConstructor(new Class[] { Class.forName("javax.servlet.http.HttpServletRequest"), String.class, Integer.TYPE });
Object[] parms = { request, saveDir, new Integer(maxSize) };
this.multi = ((MultiPartRequest) ctor.newInstance(parms));
} catch (ClassNotFoundException e) {
addError("Class: " + parser + " not found.");
} catch (NoSuchMethodException e) {
addError("Constructor error for " + parser + ": " + e);
} catch (InstantiationException e) {
addError("Error instantiating " + parser + ": " + e);
} catch (IllegalAccessException e) {
addError("Access errror for " + parser + ": " + e);
} catch (InvocationTargetException e) {
addError(e.getTargetException().toString());
}
}
}
Copier après la connexion

• Tout d'abord, il détermine si la requête entrante est une sous-classe de la classe abstraite MultiPartRequest. Si c'est le cas, elle fait directement référence à la requête par sa propre variable de type MultiPartRequest.

• Sinon, lisez la propriété webwork.multipart.parser de la configuration de WebWork, qui détermine ce que Webwork utilise en interne pour implémenter le téléchargement de fichiers. Si elle n’est pas spécifiée, l’implémentation de PellMultiPartRequest est utilisée par défaut.

•Après avoir trouvé la classe configurée, WebWork crée une instance de cette classe via la réflexion Java. Toutes les classes prises en charge héritent de MultiPartRequest. Après avoir créé l'instance, elles sont converties vers le haut et affectées au membre multi de MultiPartRequestWrapper.

• Le téléchargement de fichiers de WebWork encapsule plusieurs bibliothèques FileUpload courantes et n'est pas implémenté par lui-même.

•Il comprend trois implémentations : pell, cos et apache common. WebWork encapsule ces trois packages et fournit une interface d'accès commune MultiPartRequest. Les implémentations détaillées sont PellMultiPartRequest, CosMultiPartRequest et JakartaMultiPartRequest.

• Jakarta prend en charge plusieurs fichiers utilisant le même nom de paramètre HTTP. Si vous utilisez directement l'intercepteur FileUpload de WebWork, il est recommandé d'utiliser pell, car lorsque vous téléchargez un fichier avec un nom de fichier chinois, seul le package pell obtiendra correctement le nom de fichier chinois, et Apache common changera le nom de fichier en fichier. comme le nom xxx.tmp, et cos sera tronqué, donc notre seul choix est pell.

•La fonction de cos est relativement puissante, mais l'encapsulation de WebWork lui fait perdre beaucoup de fonctions car il faut définir l'encodage des caractères de la requête. L'encapsulation de WebWork n'est pas définie, ce qui conduit au problème tronqué de cos. Bien sûr, si vous utilisez cos seul, vous éviterez de tels problèmes.

3. Configuration et utilisation réelle du projet

• Fichiers de configuration

configuration des actions :

<action name="uploadAttach" class=".....attach.action.uploadAttach" caption="上传附件">
<result name="success" type="dispatcher">
<param name="location">/result.jsp</param>
</result>
<result name="error" type="dispatcher">
<param name="location">/result.jsp</param>
</result> 
<interceptor-ref name="defaultStack" /> 
<interceptor-ref name="fileUploadStack" /> //webwok 上传所需要的拦截栈
</action>
//拦截栈的定义
<interceptor-stack name="fileUploadStack">
<interceptor-ref name="fileUpload"/> 
<interceptor-ref name="params"/>
</interceptor-stack>
//拦截栈对应的拦截器
<interceptor name="fileUpload" 
class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/>
<interceptor name="params" 
class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/> 
Copier après la connexion

•Le front-end utilise Ajaxupload, qui est relativement stable et puissant. Je n'entrerai pas dans les détails ici. Il existe un site officiel : jQuery AjaxUpload code de téléchargement d'image

.

•En encapsulant la demande de téléchargement Webwork et en obtenant la classe d'analyse, tous les préliminaires ont été préparés. L'implémentation spécifique dans l'intercepteur de téléchargement est la suivante :

public String intercept(ActionInvocation invocation) throws Exception {if (!(ServletActionContext.getRequest() instanceof MultiPartRequestWrapper)) {
if (log.isDebugEnabled()) {
log.debug("bypass " + invocation.getProxy().getNamespace() + "/" + invocation.getProxy().getActionName());
}
return invocation.invoke();
}
Action action = invocation.getAction();
ValidationAware validation = null;
if ((action instanceof ValidationAware)) {
validation = (ValidationAware) action;
}
MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest();
if (multiWrapper.hasErrors()) {
Collection errors = multiWrapper.getErrors();
Iterator i = errors.iterator();
while (i.hasNext()) {
String error = (String) i.next();
if (validation != null) {
validation.addActionError(error);
}
log.error(error);
}
}
Enumeration e = multiWrapper.getFileParameterNames();
while ((e != null) && (e.hasMoreElements())) {
String inputName = (String) e.nextElement();
String[] contentType = multiWrapper.getContentTypes(inputName);
String[] fileName = multiWrapper.getFileNames(inputName);
File[] file = multiWrapper.getFiles(inputName);
if (file != null) {
for (int i = 0; i < file.length; i++) {
log.info("file " + inputName + " " + contentType[i] + " " + fileName[i] + " " + file[i]);
}
}
if (file == null) {
if (validation != null) {
validation.addFieldError(inputName, "Could not upload file(s). Perhaps it is too large&#63;");
}
log.error("Error uploading: " + fileName);
} else {
invocation.getInvocationContext().getParameters().put(inputName, file);
invocation.getInvocationContext().getParameters().put(inputName + "ContentType", contentType);
invocation.getInvocationContext().getParameters().put(inputName + "FileName", fileName);
}
}
String result = invocation.invoke();
for (Enumeration e1 = multiWrapper.getFileParameterNames(); e1 != null && e1.hasMoreElements();) {
String inputValue = (String) e1.nextElement();
File file[] = multiWrapper.getFiles(inputValue);
for (int i = 0; i < file.length; i++) {
File f = file[i];
log.info("removing file " + inputValue + " " + f);
if (f != null && f.isFile())
f.delete();
}
}
return result;
}
Copier après la connexion

•Déterminez d'abord si la requête en cours contient une requête multimédia, si c'est le cas, enregistrez le journal et exécutez l'action.
• Déterminez ensuite si MultiPartRequestWrapper contient des erreurs pendant le processus de téléchargement de fichier, renvoyez les informations d'erreur au client et ne continuez pas à appeler Action.
•Si aucune des conditions de jugement ci-dessus n'est remplie, commencez à parcourir les paramètres du fichier téléchargé dans MultiPartRequestWrapper et placez le nom du fichier et le type de contenu du fichier dans la mappe des paramètres d'action pour que les classes métier suivantes fonctionnent.
•Dans la fonction d'intercepteur de téléchargement de fichiers de WebWork, le fichier qu'il fournit n'est qu'un fichier temporaire, qui sera automatiquement supprimé après l'exécution de l'action. Vous devez gérer vous-même le stockage du fichier dans l'action ou l'écrire dans un répertoire. le serveur, ou Enregistrer dans la base de données. Si vous envisagez d'écrire dans un répertoire sur le serveur, vous devez faire face au problème de gérer vous-même le même nom de fichier, mais en fait, le package cos fournit déjà des règles de renommage automatique pour les renommages de fichiers.

Le code ci-dessus vous présente les connaissances pertinentes de Webwork pour le téléchargement et le téléchargement de fichiers. J'espère qu'il vous sera utile.

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
4 Il y a quelques semaines By DDD
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Opération d'ouverture Python après avoir téléchargé le fichier Opération d'ouverture Python après avoir téléchargé le fichier Apr 03, 2024 pm 03:39 PM

Python fournit les options suivantes pour ouvrir les fichiers téléchargés : Fonction open() : ouvre le fichier en utilisant le chemin et le mode spécifiés (tels que « r », « w », « a »). Bibliothèque de requêtes : utilisez sa méthode download() pour attribuer automatiquement un nom et ouvrir directement le fichier. Bibliothèque Pathlib : utilisez les méthodes write_bytes() et read_text() pour écrire et lire le contenu du fichier.

Comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers Comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers Nov 02, 2023 pm 04:36 PM

Comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers Laravel est un framework Web PHP populaire qui fournit une multitude de fonctions et d'outils pour rendre le développement d'applications Web plus facile et plus efficace. L'une des fonctions couramment utilisées est le téléchargement et le téléchargement de fichiers. Cet article expliquera comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers, et fournira des exemples de code spécifiques. Téléchargement de fichiers Le téléchargement de fichiers fait référence au téléchargement de fichiers locaux sur le serveur pour le stockage. Dans Laravel, nous pouvons utiliser le téléchargement de fichiers

Comment utiliser les fonctions PHP pour télécharger et télécharger des pièces jointes pour envoyer et recevoir des e-mails ? Comment utiliser les fonctions PHP pour télécharger et télécharger des pièces jointes pour envoyer et recevoir des e-mails ? Jul 25, 2023 pm 08:17 PM

Comment utiliser les fonctions PHP pour télécharger et télécharger des pièces jointes pour envoyer et recevoir des e-mails ? Avec le développement rapide des technologies de communication modernes, le courrier électronique est devenu un moyen important pour communiquer et transmettre des informations dans la vie quotidienne. Dans le développement Web, nous rencontrons souvent le besoin d’envoyer et de recevoir des e-mails avec des pièces jointes. En tant que puissant langage de script côté serveur, PHP fournit une multitude de fonctions et de bibliothèques de classes qui peuvent simplifier le processus de traitement des e-mails. Cet article explique comment utiliser les fonctions PHP pour télécharger et télécharger des pièces jointes pour l'envoi et la réception d'e-mails. L'e-mail est envoyé en premier, nous

Implémenter le téléchargement et le téléchargement de fichiers dans les documents Workerman Implémenter le téléchargement et le téléchargement de fichiers dans les documents Workerman Nov 08, 2023 pm 06:02 PM

Pour implémenter le téléchargement et le téléchargement de fichiers dans des documents Workerman, des exemples de code spécifiques sont requis Introduction : Workerman est un framework de communication réseau asynchrone PHP hautes performances, simple, efficace et facile à utiliser. Dans le développement réel, le téléchargement et le téléchargement de fichiers sont des exigences fonctionnelles courantes. Cet article explique comment utiliser le framework Workerman pour implémenter le téléchargement et le téléchargement de fichiers, et donne des exemples de code spécifiques. 1. Téléchargement de fichiers : le téléchargement de fichiers fait référence à l'opération de transfert de fichiers de l'ordinateur local vers le serveur. Ce qui suit est utilisé

Comment utiliser gRPC pour implémenter le téléchargement de fichiers dans Golang ? Comment utiliser gRPC pour implémenter le téléchargement de fichiers dans Golang ? Jun 03, 2024 pm 04:54 PM

Comment implémenter le téléchargement de fichiers à l'aide de gRPC ? Créez des définitions de service de support, y compris des messages de demande et de réponse. Sur le client, le fichier à télécharger est ouvert et divisé en morceaux, puis diffusé sur le serveur via un flux gRPC. Côté serveur, des fragments de fichiers sont reçus et stockés dans un fichier. Le serveur envoie une réponse une fois le téléchargement du fichier terminé pour indiquer si le téléchargement a réussi.

Comment utiliser le framework Hyperf pour le téléchargement de fichiers Comment utiliser le framework Hyperf pour le téléchargement de fichiers Oct 21, 2023 am 08:23 AM

Comment utiliser le framework Hyperf pour le téléchargement de fichiers Introduction : Le téléchargement de fichiers est une exigence courante lors du développement d'applications Web à l'aide du framework Hyperf. Cet article explique comment utiliser le framework Hyperf pour le téléchargement de fichiers, y compris des exemples de code spécifiques. 1. Préparation Avant de commencer, assurez-vous d'avoir installé le framework Hyperf et créé avec succès une application Hyperf. 2. Créer un contrôleur de téléchargement de fichiers Tout d'abord, nous devons créer un contrôleur pour gérer les demandes de téléchargement de fichiers. Ouvrez le terminal et entrez

Comment résoudre l'exception de téléchargement de fichiers Java (FileUploadException) Comment résoudre l'exception de téléchargement de fichiers Java (FileUploadException) Aug 18, 2023 pm 12:11 PM

Comment résoudre l'exception de téléchargement de fichiers Java (FileUploadException). Un problème souvent rencontré dans le développement Web est FileUploadException (exception de téléchargement de fichiers). Cela peut se produire pour diverses raisons telles qu'une taille de fichier dépassant la limite, une incompatibilité de format de fichier ou une configuration incorrecte du serveur. Cet article décrit quelques méthodes pour résoudre ces problèmes et fournit des exemples de code correspondants. Limiter la taille des fichiers téléchargés Dans la plupart des scénarios, limitez la taille du fichier

Téléchargement et traitement de fichiers dans Laravel : gestion des fichiers téléchargés par les utilisateurs Téléchargement et traitement de fichiers dans Laravel : gestion des fichiers téléchargés par les utilisateurs Aug 13, 2023 pm 06:45 PM

Téléchargement et traitement de fichiers dans Laravel : gestion des fichiers téléchargés par les utilisateurs Introduction : Le téléchargement de fichiers est une exigence fonctionnelle très courante dans les applications Web modernes. Dans le framework Laravel, le téléchargement et le traitement de fichiers deviennent très simples et efficaces. Cet article explique comment gérer les fichiers téléchargés par les utilisateurs dans Laravel, y compris la vérification, le stockage, le traitement et l'affichage des téléchargements de fichiers. 1. Téléchargement de fichiers Le téléchargement de fichiers fait référence au téléchargement de fichiers du client vers le serveur. Dans Laravel, les téléchargements de fichiers sont très simples à gérer. d'abord,

See all articles