Laden Sie Dateien mit Java HttpURLConnection hoch

Ich habe versucht, eine Datei von einem Java-Client auf den im folgenden Artikel implementierten Server hochzuladen, daher werde ich die Vorgehensweise beschreiben. Ich habe versucht, eine Datei von httpclient auf den Ruby Sinatra-Server hochzuladen

Im Vergleich zu Ruby kann nicht geholfen werden, aber der Code ist länger geworden.

Ich habe den Code korrigiert, indem ich im Kommentarbereich darauf hingewiesen habe. </ font>

Uploader.java


import java.io.OutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.UUID;

public class Uploader {
    private static final String EOL = "\r\n";

    public static int Send(String filename, String url, String method) throws IOException {
        try (FileInputStream file = new FileInputStream(filename)) {
            HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
            final String boundary = UUID.randomUUID().toString();
            con.setDoOutput(true);
            con.setRequestMethod(method);
            con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
            try (OutputStream out = con.getOutputStream()) {
                out.write(("--" + boundary + EOL +
                    "Content-Disposition: form-data; name=\"file\"; " +
                    "filename=\"" + filename + "\"" + EOL +
                    "Content-Type: application/octet-stream" + EOL + EOL)
                    .getBytes(StandardCharsets.UTF_8)
                );
                byte[] buffer = new byte[128];
                int size = -1;
                while (-1 != (size = file.read(buffer))) {
                    out.write(buffer, 0, size);
                }
                out.write((EOL + "--" + boundary + "--" + EOL).getBytes(StandardCharsets.UTF_8));
                out.flush();
                System.err.println(con.getResponseMessage());
                return con.getResponseCode();
            } finally {
                con.disconnect();
            }
        }
    }

    public static void main(String[] args) throws IOException {
        if (args.length < 2) {
            System.err.println("Input [Upload file path] [Upload URL]");
            return;
        }
        String filename = args[0];
        String url = args[1];
        int res = Uploader.Send(filename, url, "POST");
        if (res == HttpURLConnection.HTTP_OK) {
            System.err.println("Success!");
        } else {
            System.err.printf("Failed %d\n", res);
        }
    }
}

Außerdem wurde diese Quelle erstellt, damit die Kommunikation, die die Datei mit Curl hochgeladen hat, mit Wireshark bestätigt wurde und der Inhalt für Java identisch war.

$ curl -X POST http://localhost:3000/upload -F "file=@./filepath"

Recommended Posts

Laden Sie Dateien mit Java HttpURLConnection hoch
[Java] Erstellen Sie eine temporäre Datei
Machen Sie einen Diamanten mit Java
Führen Sie eine Batchdatei von Java aus
Erstellen Sie ein Java-Projekt mit Eclipse
Erstellen wir ein Datei-Upload-System mit der Azure Computer Vision-API und dem Java SDK von Azure Storage
Warum nennt Java eine Datei eine Klasse?
[Persönliches Memo] Schreiben einer Datei mit BufferedWriter
[Java] Test S3 Upload / Download mit "S3 Ninja"
Lesen einer Datei mit der Scannerklasse von Java
[Persönliches Memo] Lesen von Dateien mit BufferedReader
[Java] HttpURLConnection POST
Erstellung von Java-Dateien
[Java] Erstellen einer Excel-Datei mit Apache POI
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Mit ShiftJIS in Datei schreiben ・ Datei lesen (Kotlin / JVM)
Die Geschichte des Versuchs, JAVA File zu bedienen
Eine Bat-Datei, die Java in Windows verwendet
SSH-Verbindung mit SSHJ aus der Java6-App
[Java] Erstellen wir einen Minecraft Mod 1.14.4 [0. Basisdatei]
[Java] Dateisystembetrieb
Sortieren mit Java-Komparator
Erstellen Sie eine Java-Entwicklungsumgebung mit jenv auf Ihrem Mac
So springen Sie von Eclipse Java zu einer SQL-Datei
Java-Eigenschaftendatei lesen
Java (geteilte Quelldatei)
Java Core: gehackte Core-Datei
[Java] Erstellen wir einen Minecraft Mod 1.16.1 [Basisdatei]
Java baut ein Dreieck
Schrottpraxis mit Java ②
Ich habe versucht, Log4j2 auf einem Java EE-Server zu verwenden
Ich habe versucht, mit OCR eine PDF-Datei mit Java zu verarbeiten
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
Schrottpraxis mit Java ①
So konvertieren Sie A in a und a in A mit logischem Produkt und Summe in Java
So konvertieren Sie eine Datei in ein Byte-Array in Java
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
Ich habe versucht, ein Aktienchart mit Java (Jsoup) zu kratzen.
[Anfänger] Android App, die Bälle mit Sensoren rollt [Java]
Aktivieren Sie die Zelle A1 jeder Excel-Datei mit Java
Versuchen Sie Hello World mit einfachem Java im Docker-Container
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①
Erstellen eines MOB mit dem Minecraft Java Mythicmobs-Plug-In | Vorbereitung 1
Ein einfaches CRUD-Beispiel mit Java Servlet / JSP und MySQL
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Ich habe eine Docker-Datei erstellt, um Glassfish 5 mit Oracle Java zu starten
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Erstellen eines Kalenders mit Ruby
Erstellen Sie eine Java-Methode [Memo] [java11]
Was ist eine JAR-Datei?
Datei-Upload mit Spring Boot
Suchen Sie eine Teilmenge in Java
Was ist eine Java-Sammlung?
[Java] Mach es konstant
Erstellen Sie eine Lotterie mit Ruby