1. Le moyen le plus direct et le plus simple consiste à mettre l’adresse du fichier directement dans un lien sur la page HTML. L'inconvénient est que le chemin du fichier sur le serveur est exposé et que d'autres contrôles (tels que les autorisations) sur les téléchargements de fichiers ne peuvent pas être effectués. Je n’écrirai pas d’exemple ici.
2. Côté serveur, le fichier est converti en flux de sortie, écrit dans la réponse, et le fichier est amené au navigateur avec la réponse. Le navigateur demande à l'utilisateur s'il souhaite enregistrer le fichier localement. (exemple ci-dessous)
<%
réponse.setContentType(fileminitype);
réponse.setHeader("Emplacement",nom de fichier);
réponse.setHeader("Cache-Control", "max-age=" + cacheTime);
réponse.setHeader("Content-Disposition", "attachment; filename=" + filename //le nom de fichier doit être codé (utf-8) ;
réponse.setContentLength(filelength);
OutputStream sortieStream = réponse.getOutputStream();
InputStream inputStream = new FileInputStream (chemin du fichier);
octet[] tampon = nouvel octet[1024];
int je = -1;
while ((i = inputStream.read(buffer)) != -1) {
outputStream.write(tampon, 0, i);
}
sortieStream.flush();
sortieStream.close();
inputStream.close();
flux de sortie = nul
%>
3. Puisqu'il s'agit de JSP, une autre façon consiste à utiliser Applet pour télécharger des fichiers. Cependant, le client doit d'abord faire confiance à votre applet Applet, qui acceptera le flux de données envoyé par le servlet et l'écrira localement.
exemple côté servlet
service public void (requête HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
res.setContentType("text/plain");
OutputStream sortieStream = null ;
essayer {
outputStream = res.getOutputStream();
popFile(srcFile, outputStream));//Écrivez le fichier avec le chemin de fichier srcFile dans OutputStream.
} catch (IOException e) {
e.printStackTrace();
}
}
Exemple côté JApplet
Connexion URL avec ;
essayer {
con = url.openConnection();//url est l'URL du SERVLET appelé tel que http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Type de contenu",
"application/flux d'octets");
InputStream in = con.getInputStream();
ProgressMonitorInputStream pmInputStream = nouveau ProgressMonitorInputStream(
volet "Téléchargement du contenu du fichier à partir du serveur", dans );
ProgressMonitor pMonitor = pmInputStream
.getProgressMonitor();
pMonitor.setMillisToDecideToPopup(3);
pMonitor.setMillisToPopup(3);
Chaîne localfilepath = localstr + filename;//localfilepath chemin local, dossier de fichiers localstr, nom de fichier nom de fichier local
if(saveFilsaveFilee(localfilepath,pmInputStream)){ //La méthode saveFilsaveFilee écrit le flux d'entrée pmInputStream dans le fichier localfilepath.
openLocalFile(chemin du fichier local);
}
4. À propos, le code permettant à JApplet de télécharger des fichiers est également publié.
Exemple côté JApplet
URLConnection con;
essayer {
con = url.openConnection();//url est l'URL du SERVLET appelé tel que http://localhost:8080/sendDateSevlet.do
con.setUseCaches(false);
con.setDoInput(true);
con.setDoOutput(true);
con.setRequestProperty("Type de contenu",
"application/flux d'octets");
OutputStream out = con.getOutputStream();
String localfilepath = localstr + filename; //localfilepath chemin local, dossier de fichiers localstr, nom de fichier nom de fichier local
getOutputStream(localfilepath,out);//Le fichier getOutputStream écrit le fichier localfilepath dans le flux de sortie.
InputStream in = con.getInputStream();
renvoie vrai ;
}catch (IOException e) {
System.out.println("Erreur de téléchargement de fichier !");
e.printStackTrace();
}
exemple de code côté servlet
service public void (requête HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
res.setContentType("text/plain");
InputStream inputStream = null ;
essayer {
inputStream = res.getInputStream();
writefile(srcFile, inputStream);//Enregistrez le flux d'entrée inputStream dans le fichier avec le chemin de fichier srcFile
} catch (IOException e) {
e.printStackTrace();
}
} //
Résumé du service de fin : Dans la transmission de fichiers, il existe sous forme de flux, et sur le disque dur, il existe sous forme de fichier. Tout ce que nous avons à faire est d'envoyer le flux et de lire le flux via HttpServletRequest et HttpServletResponse, ou réponse et demande. Ainsi que les opérations qui convertissent des fichiers en flux ou des flux en fichiers.