Téléchargeur de fichiers Java simple sans dépendances

Publié: 2023-01-06

L'une des exigences fondamentales des applications Web et des sites Web contemporains est la possibilité de télécharger des fichiers, tels que des documents, des photos et des vidéos. Par exemple, les utilisateurs peuvent publier des vidéos et des images sur des plateformes de réseaux sociaux comme Instagram.

La mise en œuvre et la gestion de la procédure de téléchargement de fichiers étaient auparavant une tâche difficile. Heureusement, les téléchargements de fichiers sont devenus plus simples grâce aux progrès de la technologie en ligne. Par exemple, un téléchargeur de fichiers Java rend le téléchargement de fichiers rapide et pratique.

Cependant, grâce au téléchargement de fichiers, les cybercriminels peuvent introduire des logiciels malveillants ou d'autres contenus nuisibles sur votre ordinateur et corrompre le serveur. Les développeurs doivent donc s'assurer que le téléchargement de fichiers sur leur site Web ou leur application Web est sûr. Pour établir un téléchargement de fichiers sécurisé, nous vous recommandons d'utiliser un SDK de téléchargement de fichiers Java fiable.

Nous verrons comment utiliser Java pour créer un téléchargeur de fichiers dans cet article.

Comment implémenter un téléchargeur de fichiers à l'aide de Java ?

Un téléchargeur de fichiers n'est rien de plus qu'un "soumettre" sur lequel les utilisateurs peuvent cliquer pour télécharger un fichier vers une application Web ou un site Web. Un téléchargeur de fichiers, cependant, signifie beaucoup plus pour les développeurs.

Nous pouvons créer un téléchargeur de fichiers simple dans lequel nous n'utilisons qu'un formulaire HTML et un servlet. Dans notre exemple, le formulaire HTML aura deux champs de saisie. Un champ de saisie permet à l'utilisateur de télécharger son fichier et le deuxième champ de saisie permet au développeur de nous dire où nous devons stocker le fichier.

Nous poursuivons la méthode POST pour envoyer ces données de formulaire, y compris le fichier, au serveur. De plus, lorsque nous téléchargeons des fichiers, nous utilisons le chiffrement=”multipart/form-data” car les fichiers contiennent beaucoup de caractères non imprimables.

Le servlet gère la requête POST et extrait le fichier du flux après avoir traité les données de fichier entrantes. La destination spécifie l'emplacement dans le système où le fichier doit être enregistré. Lorsque nous appuyons sur le bouton Télécharger, les données sont transmises au servlet, qui stocke ensuite le fichier à l'emplacement désigné.

Créer un fichier HTML avec le champ de saisie

Avant de commencer, créez un fichier index.html à suivre.

Le fichier index.html doit avoir le code suivant :

<!DOCTYPE html>
<html lang="fr">
<tête>
<title>Téléchargeur de fichiers Java</title>
<meta http-equiv=”Content-Type” content=”text/html; jeu de caractères=UTF-8″>
</head>
<corps>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
Dossier:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
Destination:
<input type="text" value="/java-folder" name="destination"/>
</br>
<input type=”submit” value=”Submit” name=”submit” id=”submit” />
</form>
</body>
</html>

Voici à quoi votre page devrait ressembler :

Gestion du traitement côté serveur du fichier

Pour écrire le code du servlet, nous allons créer un fichier appelé FileUploadServlet.java. Les serlets utilisent des annotations pour définir les composants et les métadonnées. Ainsi, l'annotation @WebServlet est utilisée pour définir un composant servlet en Java.

L'annotation de servlet doit indiquer quel HttpServlet doit être exécuté pour quelle URL. Pour cela, nous définissons les paramètres name et ulrPattern dans notre annotation @WebServlet. Notez que, lorsque nous soumettrons notre formulaire, nous redirigerons vers l'url /upload où la classe FileUploadServlet sera exécutée.

L'annotation @MultipartConfig informe le servlet qu'il va recevoir des données multipart/form de type MIME.

Écrivons maintenant notre code complet.

@WebServlet(nom = "FileUploadServlet" , urlPatterns = { "/upload" })
@MultipartConfig
la classe publique FileUploadServlet étend HttpServlet {

Enregistreur statique final privé LOGGER =
Enregistreur.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest(requête HttpServletRequest,
réponse HttpServletResponse)
lance ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" );

chaîne finale dest= request.getParameter( "destination" );
partie finale part = request.getPart( "fichier" );
chaîne finale nameOfFile = getFileName(part);

OutputStream out = null ;
InputStream cont = null ;
final PrintWriter printWriter = réponse.getWriter();

essayer {
out = new FileOutputStream( new File(dest + File.separator
+ nomDeFichier));
cont = part.getInputStream();

int lecteur = 0 ;
octet final [] octets = nouvel octet [ 1024 ] ;

tandis que ((lecteur = cont.read(octets)) != -1 ) {
out.write(octets, 0 , lecteur);
}
printWriter.println( "Fichier " + nomDeFichier + " créé à " + dest);
LOGGER.log(Level.INFO, "Fichier{0} chargé sur {1}" ,
nouvel objet[]{nameOfFile, dest} );
} catch (FileNotFoundException fne) {
printWriter.println( "Vous n'avez pas mentionné de nom de fichier ou êtes "
+ "essayer de télécharger un fichier sur un fichier inexistant"
+ "emplacement". );
printWriter.println( "<br/> ERREUR : " + fne.getMessage());

LOGGER.log(Level.SEVERE, "Erreur lors du téléchargement du fichier. Erreur : {0}" ,
nouvel objet[]{fne.getMessage()} );
} enfin {
si (out != null ) {
out.close();
}
si (suite != null ) {
cont.close();
}
si (printWriter != null ) {
printWriter.close();
}
}
}

chaîne privée getFileName (partie finale) {
chaîne finale partHeader = part.getHeader( "contenu-disposition" );
LOGGER.log(Level.INFO, "Part Header = {0}" , partHeader);
for (Contenu de la chaîne : part.getHeader( "content-disposition" ).split( ";" )) {
if (content.trim().startsWith( "nom de fichier" )) {
retourner le contenu.substring(
content.indexOf( '=' ) + 1 ).trim().replace( "\"" , "" );
}
}
renvoie nul ;
}
}

La méthode processRequest appelle la méthode getFileName pour obtenir le nom de fichier à partir de la partie fichier après avoir récupéré la destination et la partie fichier à partir de la requête. Ensuite, la méthode crée un FileOutputStream et transfère le fichier à l'emplacement souhaité. La partie de gestion des erreurs de la méthode détecte et traite quelques-unes des causes les plus fréquentes d'erreurs de fichier introuvable.

Déployer le code

Maintenant, nous devons construire et exécuter notre programme. Pour cela, vous pouvez utiliser n'importe lequel de vos IDE préférés tels que NetBeans, Eclipse, Intellij Idea, etc. Une fois que vous avez fait cela, une partie va à la

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

Si vous utilisez NetBeans, ouvrez Netbeans IDE et accédez au répertoire de travail. Reportez-vous à la documentation officielle de Java si vous rencontrez des problèmes. Cliquez avec le bouton droit sur votre dossier dans l'onglet Projets et choisissez Déployer. Ensuite, nous pouvons accéder au navigateur et taper l'URL ci-dessous :

http://localhost:8080/{nomdossier}/

La page HTML créée ci-dessus s'ouvrira une fois que vous aurez saisi l'URL et appuyé sur la touche Entrée. Pour télécharger un fichier à l'emplacement souhaité, nous pouvons rechercher le système et choisir le fichier. Nous tapons le chemin du dossier dans lequel nous voulons stocker le fichier dans la zone de destination. Le répertoire doit être accessible en écriture et exister déjà dans le système. Lorsque nous cliquons sur le bouton de téléchargement avec le champ de destination vide, une exception est déclenchée.

La servlet reçoit une requête POST lorsque nous cliquons sur le bouton de téléchargement et copie le fichier sélectionné dans le dossier spécifié.

Nous pouvons visiter le dossier désigné et vérifier si le fichier chargé (par exemple TextFile.txt) est là après avoir cliqué sur le bouton de téléchargement.

Jusqu'à présent, nous avons construit un téléchargeur de fichiers Java simple utilisant HTML et Java. Cependant, comme le "simple" devient un téléchargeur complexe avec de nombreuses fonctionnalités, il peut être difficile de garder une trace des fonctionnalités importantes de celles qui ne le sont pas. Sans oublier qu'il existe plusieurs problèmes de sécurité lorsque nous envisageons de créer un téléchargeur à partir de zéro. Par conséquent, la section suivante vous expliquera comment télécharger des fichiers avec le SDK sécurisé Filestack.

Comment télécharger facilement des fichiers avec Filestack SDK

Pour suivre, vous aurez besoin d'une clé API Filestack .

Pour commencer, installez le SDK Filestack à l'aide de la commande ci-dessous :

implémentation 'com.filestack:filestack-java:0.9.0'

Pour implémenter les fonctionnalités de téléchargement à l'aide de Filestack, utilisez le code suivant dans votre fichier Java :

// Création du client
Config configuration = nouvelle Config( "API_KEY" );
Client client = nouveau Client(configuration);

// Paramétrage des options et des métadonnées liées au téléchargement
Option StorageOptions = nouveau StorageOptions.Builder()
.mimeType( "texte/plain" )
.filename( "fichier.txt" )
.construire();

// Effectue un téléchargement synchrone
FileLink files = client.upload( "/filepath" , false );

// Effectue un téléchargement asynchrone
Flowable<Progress<FileLink>> upload = client.uploadAsync( "filepath" , false );
upload.doOnNext( new Consumer<Progress<FileLink>>() {
@Passer outre
public void accept(Progress<FileLink> progress) lance une exception {
System.out.printf( "%f%% Votre fichier est téléchargé\n" , progress.getPercent());
si (progress.getData() != null ) {
Fichiers FileLink = progress.getData();
}
}
});

Pour s'assurer que cela fonctionne, les tests suivants peuvent être exécutés :

./test de fichiers

Si vous cherchez à déployer votre application, Bintray est la cible des déploiements. Pour déployer, vous avez besoin d'un compte d'utilisateur enregistré auprès de l'organisation Filestack. Respectez également les directives de base de la version de Filestack. Les variables d'environnement "BINTRAY USER" et "BINTRAY API KEY" sont nécessaires. Courir:

exporter BINTRAY_USER=
exporter BINTRAY_API_KEY=
./files bintrayTéléchargement

Conclusion

Vous pouvez également opter pour un outil tiers si vous avez du mal à maintenir et à créer votre propre système de téléchargement de fichiers Java. En raison de problèmes de sécurité et de confidentialité des données, les utilisateurs peuvent éviter d'utiliser des systèmes tiers, par exemple lors du téléchargement de fichiers contenant des dossiers médicaux.

De plus, ils craignent d'avoir peu de contrôle sur qui a accès à l'infrastructure de stockage de fichiers. Cependant, vous pouvez garantir la sécurité des données de formulaire et de document en utilisant une solution de téléchargement de fichiers fiable.

Foire aux questions (FAQ)

Pouvez-vous déplacer des fichiers à l'aide d'une API ?

Oui. Le déplacement de fichiers à l'aide d'une API peut être effectué à l'aide d'outils basés sur des API disponibles sur le marché. Cela peut être combiné avec des programmes exécutés sur diverses plates-formes telles que des programmes en ligne.

Puis-je soumettre un gros fichier à l'API REST ?

Il peut être difficile de télécharger des fichiers volumineux, en particulier lorsque d'autres facteurs tels qu'une mauvaise bande passante et des connexions réseau sont présents. Cela peut entraîner de nombreux échecs de téléchargement.

Comment Java lit-il un fichier téléchargé ?

À l'aide de flux d'entrée, un programme Java lit des collections d'octets ou de caractères. La lecture de fichier est une opération séquentielle qui commence par la construction de l'objet fichier, le transmet au fichier d'entrée, lit les données du flux, les traite, puis ferme le flux et l'objet fichier.

Qu'est-ce qu'un outil de téléchargement de fichiers ?

Il s'agit d'une API ou d'un plug-in qui peut être connecté à votre application Web et permettre aux utilisateurs de télécharger des photos, des vidéos et des fichiers texte, ainsi que d'autoriser certaines modifications de base, des effets de filtre, etc.