Einfacher Java-Datei-Uploader ohne Abhängigkeiten

Veröffentlicht: 2023-01-06

Eine der grundlegenden Anforderungen an moderne Webanwendungen und Websites ist die Möglichkeit, Dateien wie Dokumente, Fotos und Videos hochzuladen. Benutzer können beispielsweise Videos und Bilder auf sozialen Netzwerkplattformen wie Instagram veröffentlichen.

Die Implementierung und Verwaltung des Datei-Upload-Verfahrens war bisher eine schwierige Aufgabe. Dank der Fortschritte in der Online-Technologie ist das Hochladen von Dateien glücklicherweise einfacher geworden. Beispielsweise macht ein Java-Datei-Uploader das Hochladen von Dateien schnell und bequem.

Durch das Hochladen von Dateien können Cyberkriminelle jedoch Malware oder andere schädliche Inhalte auf Ihren Computer einschleusen und den Server beschädigen. Entwickler müssen daher unbedingt sicherstellen, dass der Datei-Upload auf ihrer Website oder Webanwendung sicher ist. Um einen sicheren Datei-Upload einzurichten, empfehlen wir Ihnen, ein zuverlässiges Java-Datei-Upload-SDK zu verwenden.

Wir gehen in diesem Artikel darauf ein, wie man mit Java einen Datei-Uploader erstellt.

Wie implementiert man einen Datei-Uploader mit Java?

Ein Datei-Uploader ist nichts anderes als ein „Senden“, auf das Benutzer klicken können, um eine Datei auf eine Webanwendung oder Website hochzuladen. Ein Datei-Uploader bedeutet Entwicklern jedoch wesentlich mehr.

Wir können einen einfachen Datei-Uploader erstellen, in dem wir nur ein HTML-Formular und ein Servlet verwenden. In unserem Beispiel hat das HTML-Formular zwei Eingabefelder. Ein Eingabefeld ermöglicht es dem Benutzer, seine Datei hochzuladen, und das zweite Eingabefeld ermöglicht es dem Entwickler, uns mitzuteilen, wo wir die Datei speichern sollen.

Wir verwenden die POST-Methode, um die Formulardaten einschließlich der Datei an den Server zu senden. Außerdem verwenden wir beim Hochladen von Dateien encrypt=“multipart/form-data“, da Dateien viele nicht druckbare Zeichen enthalten.

Das Servlet verwaltet die POST-Anforderung und extrahiert die Datei aus dem Stream, nachdem es die eingehenden Dateidaten verarbeitet hat. Das Ziel gibt den Ort im System an, an dem die Datei gespeichert werden muss. Wenn wir auf die Schaltfläche Hochladen klicken, werden die Daten an das Servlet übertragen, das die Datei dann am angegebenen Ort speichert.

Erstellen einer HTML-Datei mit dem Eingabefeld

Bevor wir beginnen, erstellen Sie eine index.html - Datei, der Sie folgen können.

Die index.html sollte den folgenden Code haben:

<!DOCTYPE html>
<html lang="de">
<Kopf>
<title>Java-Datei-Uploader</title>
<meta http-equiv=“Content-Type“ content=“text/html; Zeichensatz=UTF-8″>
</head>
<Körper>
<form method="POST" action="upload" enctype="multipart/form-data" >
Datei:
<input type=“file“ name=“java-file“ id=“java-file“ /> <br/>
Ziel:
<input type="text" value="/java-folder" name="destination"/>
</br>
<input type=“submit“ value=“submit“ name=“submit“ id=“submit“ />
</form>
</body>
</html>

So sollte Ihre Seite aussehen:

Behandlung der serverseitigen Verarbeitung der Datei

Um Servlet-Code zu schreiben, erstellen wir eine Datei namens FileUploadServlet.java. Serlets verwenden Annotationen, um Komponenten und Metadaten zu definieren. Daher wird die @WebServlet-Annotation verwendet, um eine Servlet-Komponente in Java zu definieren.

Die Servlet-Annotation sollte angeben, welches HttpServlet für welche URL ausgeführt werden soll. Dafür definieren wir die Parameter name und ulrPattern in unserer Annotation @WebServlet. Beachten Sie, dass wir beim Absenden unseres Formulars zur /upload-URL umleiten, wo die FileUploadServlet-Klasse ausgeführt wird.

Die Annotation @MultipartConfig informiert das Servlet darüber, dass es Multipart/Formular-Daten im MIME-Typ erhalten wird.

Lassen Sie uns jetzt unseren vollständigen Code schreiben.

@WebServlet(name = „FileUploadServlet“ , urlPatterns = { „/upload“ })
@MultipartConfig
öffentliche Klasse FileUploadServlet erweitert HttpServlet {

privater finaler statischer Logger LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest(HttpServletRequest Anfrage,
HttpServletResponse-Antwort)
wirft ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" );

final String dest= request.getParameter( “destination” );
letzter Teil part = request.getPart( „file“ );
final String nameOfFile = getFileName(part);

OutputStream out = null ;
InputStream cont = null ;
endgültiger PrintWriter printWriter = response.getWriter();

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

int Leser = 0 ;
letztes Byte [] Bytes = neues Byte [ 1024 ];

while ((reader = cont.read(bytes)) != -1 ) {
out.write (Bytes, 0 , Leser);
}
printWriter.println( „Datei „ + nameOfFile + “ erstellt bei „ + Ziel);
LOGGER.log(Level.INFO, „Datei{0} hochgeladen auf {1}“ ,
neues Objekt[]{Dateiname, Ziel});
} catch (FileNotFoundException fne) {
printWriter.println( „Sie haben keinen Dateinamen genannt oder sind „
+ „Versuch, eine Datei auf ein nicht vorhandenes hochzuladen“
+ „Standort“. );
printWriter.println( “<br/> FEHLER: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, „Fehler beim Hochladen der Datei. Fehler: {0}“ ,
neues Objekt[]{fne.getMessage()});
} schließlich {
if (out != null ) {
out.close();
}
if (cont != null ) {
cont.close();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(final Part part) {
final String partHeader = part.getHeader( „content-disposition“ );
LOGGER.log(Level.INFO, „Part Header = {0}“ , partHeader);
for (String content : part.getHeader( „content-disposition“ ).split( „;“ )) {
if (content.trim().startsWith( „Dateiname“ )) {
Inhalt zurückgeben . Teilstring (
content.indexOf( '=' ) + 1 ).trim().replace( „\““ , „“ );
}
}
Null zurückgeben ;
}
}

Die Methode processRequest ruft die Methode getFileName auf, um den Dateinamen aus dem Dateiteil zu erhalten, nachdem das Ziel und der Dateiteil aus der Anforderung abgerufen wurden. Anschließend erstellt die Methode einen FileOutputStream und überträgt die Datei an den gewünschten Ort. Der Fehlerbehandlungsteil der Methode erkennt und behebt einige der häufigsten Ursachen für Datei nicht gefunden-Fehler.

Stellen Sie den Code bereit

Jetzt müssen wir unser Programm erstellen und ausführen. Dafür können Sie jede Ihrer bevorzugten IDEs wie NetBeans, Eclipse, Intellij Idea usw. verwenden. Sobald Sie dies getan haben, gehen Sie zum Teil

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

Wenn Sie NetBeans verwenden, öffnen Sie Netbeans IDE und navigieren Sie zum Arbeitsverzeichnis. Schlagen Sie bei Problemen in der offiziellen Java-Dokumentation nach. Klicken Sie auf der Registerkarte Projekte mit der rechten Maustaste auf Ihren Ordner und wählen Sie Bereitstellen aus. Als nächstes können wir auf den Browser zugreifen und die folgende URL eingeben:

http://localhost:8080/{Ordnername}/

Die oben erstellte HTML-Seite öffnet sich, nachdem Sie die URL eingegeben und die Eingabetaste gedrückt haben. Um eine Datei an den gewünschten Ort hochzuladen, können wir das System durchsuchen und die Datei auswählen. Wir geben den Pfad zu dem Ordner ein, in dem wir die Datei im Zielbereich speichern möchten. Das Verzeichnis muss beschreibbar und bereits im System vorhanden sein. Wenn wir bei leerem Zielfeld auf die Schaltfläche zum Hochladen klicken, wird eine Ausnahme ausgelöst.

Das Servlet erhält eine POST-Anforderung, wenn wir auf die Schaltfläche zum Hochladen klicken, und kopiert die ausgewählte Datei in den angegebenen Ordner.

Wir können den angegebenen Ordner besuchen und prüfen, ob die geladene Datei (z. B. TextFile.txt) vorhanden ist, nachdem wir auf die Schaltfläche zum Hochladen geklickt haben.

Bisher haben wir einen einfachen Java-Datei-Uploader mit HTML und Java erstellt. Da der „einfache“ jedoch zu einem komplexen Uploader mit vielen Funktionen wird, kann es schwierig sein, die wichtigen Funktionen von denen zu unterscheiden, die es nicht sind. Ganz zu schweigen davon, dass es mehrere Sicherheitsprobleme gibt, wenn wir erwägen, einen Uploader von Grund auf neu zu erstellen. Daher führt Sie der nächste Abschnitt durch, wie Sie Dateien mit dem sicheren Filestack SDK hochladen können.

So laden Sie Dateien einfach mit Filestack SDK hoch

Um mitzumachen, benötigen Sie einen Filestack-API-Schlüssel .

Installieren Sie zunächst das Filestack SDK mit dem folgenden Befehl:

Implementierung „com.filestack:filestack-java:0.9.0“

Um die Upload-Funktionen mit Filestack zu implementieren, verwenden Sie den folgenden Code in Ihrer Java-Datei:

// Client erstellen
Config-Konfiguration = neue Config( „API_KEY“ );
Client-Client = neuer Client (Konfiguration);

// Einstellungsoptionen und Upload-bezogene Metadaten
StorageOptions-Option = new StorageOptions.Builder()
.mimeType( „Text/Klartext“ )
.Dateiname( "Datei.txt" )
.bauen();

// Führen Sie einen synchronen Upload durch
FileLink-Dateien = client.upload( „/filepath“ , false );

// Führen Sie einen asynchronen Upload durch
Flowable<Progress<FileLink>> upload = client.uploadAsync( “filepath” , false );
upload.doOnNext( new Consumer<Fortschritt<FileLink>>() {
@Überschreiben
public void accept(Progress<FileLink> progress) löst Ausnahme aus {
System.out.printf( „%f%% Ihre Datei wurde hochgeladen\n“ , progress.getPercent());
if (progress.getData() != null ) {
FileLink-Dateien = progress.getData();
}
}
});

Um sicherzustellen, dass es funktioniert, können die folgenden Tests durchgeführt werden:

./Dateien testen

Falls Sie Ihre App bereitstellen möchten, ist Bintray das Ziel von Bereitstellungen. Für die Bereitstellung benötigen Sie ein Benutzerkonto, das bei der Filestack-Organisation registriert wurde. Beachten Sie auch die grundlegenden Filestack-Release-Richtlinien. Die Umgebungsvariablen „BINTRAY USER“ und „BINTRAY API KEY“ werden benötigt. Laufen:

export BINTRAY_USER=
export BINTRAY_API_KEY=
./files bintrayUpload

Fazit

Sie können sich auch für ein Drittanbieter-Tool entscheiden, wenn Sie Schwierigkeiten haben, Ihr eigenes Java-Datei-Upload-System zu warten und zu erstellen. Aus Gründen der Datensicherheit und des Datenschutzes vermeiden Menschen möglicherweise die Nutzung von Drittsystemen, beispielsweise beim Hochladen von Dateien mit Krankenakten.

Außerdem befürchten sie, dass sie wenig Kontrolle darüber haben, wer Zugriff auf die Dateispeicherinfrastruktur hat. Sie können jedoch die Sicherheit von Formular- und Dokumentdaten gewährleisten, indem Sie eine zuverlässige Datei-Upload-Lösung verwenden.

Häufig gestellte Fragen (FAQs)

Können Sie Dateien mit einer API verschieben?

Ja. Das Verschieben von Dateien mit einer API kann mit marktüblichen API-basierten Tools erfolgen. Dies kann mit Programmen kombiniert werden, die auf verschiedenen Plattformen ausgeführt werden, wie z. B. auch Online-Programmen.

Kann ich eine große Datei an die REST-API senden?

Es kann schwierig sein, große Dateien hochzuladen, insbesondere wenn andere Faktoren wie schlechte Bandbreite und Netzwerkverbindungen vorhanden sind. Dies kann zu zahlreichen Upload-Fehlern führen.

Wie liest Java eine hochgeladene Datei?

Unter Verwendung von Eingabeströmen liest ein Java-Programm Sammlungen von Bytes oder Zeichen. Das Lesen von Dateien ist eine sequentielle Operation, die mit dem Erstellen des Dateiobjekts beginnt, es an die Eingabedatei übergibt, die Daten aus dem Stream liest, sie verarbeitet und dann den Stream und das Dateiobjekt schließt.

Was ist ein Datei-Upload-Tool?

Es ist eine API oder ein Plugin, das mit Ihrer Webanwendung verbunden werden kann und es Benutzern ermöglicht, Fotos, Videos und Textdateien hochzuladen sowie einige grundlegende Änderungen, Filtereffekte usw.