Télécharger des fichiers à l'aide de Java HttpURLConnection

J'ai essayé de télécharger un fichier d'un client Java vers le serveur implémenté dans l'article suivant, je vais donc décrire la procédure. J'ai essayé de télécharger un fichier depuis httpclient vers le serveur Ruby Sinatra

Cela ne peut pas être aidé par rapport à Ruby, mais le code est devenu plus long.

J'ai corrigé le code en le faisant remarquer dans la section commentaire. </ 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);
        }
    }
}

De plus, cette source a été créée pour que la communication qui a téléchargé le fichier avec curl soit confirmée avec Wireshark et que le contenu soit le même pour java.

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

Recommended Posts

Télécharger des fichiers à l'aide de Java HttpURLConnection
[Java] Créer un fichier temporaire
Faire un diamant en utilisant Java
Exécuter le fichier de commandes à partir de Java
Créer un projet Java à l'aide d'Eclipse
Créons un système de téléchargement de fichiers à l'aide de l'API Azure Computer Vision et du SDK Java d'Azure Storage
Pourquoi Java appelle-t-il un fichier une classe?
[Mémo personnel] Écriture d'un fichier à l'aide de BufferedWriter
[Java] Tester le chargement / téléchargement de S3 avec "S3 ninja"
Lire un fichier à l'aide de la classe Scanner de Java
[Mémo personnel] Lecture de fichiers à l'aide de BufferedReader
[java] HttpURLConnection POST
création de fichier java
[Java] Création d'un fichier Excel à l'aide d'Apache POI
Lire une chaîne dans un fichier PDF avec Java
Écrire dans un fichier en utilisant ShiftJIS ・ Lire un fichier (Kotlin / JVM)
Histoire d'essayer de faire fonctionner le fichier JAVA
Un fichier bat qui utilise Java dans Windows
Connexion SSH à l'aide de SSHJ à partir de l'application Java 6
[Java] Créons un Minecraft Mod 1.14.4 [0. Fichier de base]
[Java] Fonctionnement du système de fichiers
Tri à l'aide du comparateur java
Créez un environnement de développement Java à l'aide de jenv sur votre Mac
Comment passer d'Eclipse Java à un fichier SQL
Lire le fichier de propriétés Java
java (fichier source fractionné)
noyau java: fichier de base haché
[Java] Créons un Minecraft Mod 1.16.1 [Fichier de base]
java construire un triangle
Pratique de grattage avec Java ②
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
J'ai essayé OCR de traiter un fichier PDF avec Java
Utilisation de la base de données (SQL Server 2014) à partir d'un programme Java 04/01/2018
Pratique du grattage avec Java ①
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment convertir un fichier en tableau d'octets en Java
Essayez de créer un environnement de développement Java à l'aide de Docker
Java11: exécuter le code Java dans un seul fichier tel quel
J'ai essayé de gratter un graphique boursier en utilisant Java (Jsoup)
[Débutant] Application Android qui fait rouler des balles à l'aide de capteurs [Java]
Activez la cellule A1 de chaque feuille de fichier Excel avec Java
Essayez Hello World en utilisant Java brut sur le conteneur Docker
Communication socket avec un navigateur Web utilisant Java et JavaScript ②
À propos du comportement lors de la création d'un mappage de fichiers avec Java
Communication socket avec un navigateur Web utilisant Java et JavaScript ①
Création d'un MOB à l'aide du plug-in Minecraft Java Mythicmobs | Préparation 1
Un exemple CRUD simple utilisant Java Servlet / JSP et MySQL
J'ai essayé OCR de traiter un fichier PDF avec Java part2
J'ai créé un Dockerfile pour démarrer Glassfish 5 en utilisant Oracle Java
Essayez d'utiliser RocksDB avec Java
Essayez de gratter en utilisant Java [Note]
Créer un calendrier avec Ruby
Créer une méthode java [Memo] [java11]
Qu'est-ce qu'un fichier JAR?
Téléchargement de fichiers avec Spring Boot
Rechercher un sous-ensemble en Java
Qu'est-ce qu'une collection Java?
[Java] Rendez-le constant
Créer une loterie avec Ruby