[JAVA] Bibliothèque de transmission en plusieurs parties sur Android

Il n'y avait pas beaucoup d'exemples de transmission en plusieurs parties simples et faciles, alors je l'ai posté au lieu d'un mémo.

Corps de la bibliothèque

PostMultipart.java


package com.app.sample;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by solid_red on 2017/03/13.
 */

public class PostMultipart {
    private final String boundary;
    private static final String LINE_FEED = "\r\n";
    private HttpURLConnection httpConn;
    private String charset;
    private OutputStream outputStream;
    private PrintWriter writer;

    public PostMultipart(String requestURL, String charset)
            throws IOException {
        this.charset = charset;

        boundary = "===" + System.currentTimeMillis() + "===";
        URL url = new URL(requestURL);
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        httpConn.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);
        outputStream = httpConn.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
                true);
    }
    
    //Ajouter un champ de formulaire
    public void addField(String name, String value) {
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append("Content-Disposition: form-data; name=\"" + name + "\"")
                .append(LINE_FEED);
        writer.append("Content-Type: text/plain; charset=" + charset).append(
                LINE_FEED);
        writer.append(LINE_FEED);
        writer.append(value).append(LINE_FEED);
        writer.flush();
    }

        //Ajouter le fichier
    public void addFile(String name, File uploadFile)
            throws IOException {
        String fileName = uploadFile.getName();
        writer.append("--" + boundary).append(LINE_FEED);
        writer.append(
                "Content-Disposition: form-data; name=\"" + name
                        + "\"; filename=\"" + fileName + "\"")
                .append(LINE_FEED);
        writer.append(
                "Content-Type: "
                        + URLConnection.guessContentTypeFromName(fileName))
                .append(LINE_FEED);
        writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
        writer.append(LINE_FEED);
        writer.flush();

        FileInputStream inputStream = new FileInputStream(uploadFile);
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
        inputStream.close();
        writer.append(LINE_FEED);
        writer.flush();
    }
        
        //Ajouter un en-tête
    public void addHeader(String name, String value) {
        writer.append(name + ": " + value).append(LINE_FEED);
        writer.flush();
    }
    
    //Courir
    public List<String> post() throws IOException {
        List<String> response = new ArrayList<String>();
        writer.append(LINE_FEED).flush();
        writer.append("--" + boundary + "--").append(LINE_FEED);
        writer.close();

        // checks server's status code first
        int status = httpConn.getResponseCode();
        if (status == HttpURLConnection.HTTP_OK) {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()));
            String line = null;
            while ((line = reader.readLine()) != null) {
                response.add(line);
            }
            reader.close();
            httpConn.disconnect();
        } else {
            throw new IOException("Send Fail: " + status);
        }
        return response;
    }
}

Comment utiliser

try {
    //Initialiser avec la destination de téléchargement et le code de caractère
    PostMultipart multipart = new PostMultipart("http://sample/upload/url", "UTF-8");

    //Ajout de paramètre normal
    multipart.addField("hoge", "fuga");

    //Pour les fichiers image
    File picture_one = new File("/sample/picture/path.jpg ");
    multipart.addFile("file1", picture_one);

    //Pour plusieurs fichiers image(On suppose que l'imageList contient plusieurs chemins de fichiers)
    for (int i = 0; i < imageList.size(); i++) {
        File picture_multi = new File(imageList.get(i));
        multipart.addFile("file2[]", picture_multi);
    }
    
    //Obtenez une liste pour chaque ligne de réponse
    List<String> response = multipart.post();
} catch (IOException e) {
    Log.e("ERROR", e.getMessage());
}

Released under the MIT license

Recommended Posts

Bibliothèque de transmission en plusieurs parties sur Android
Bibliothèque CSV Android
Bibliothèque SIP Android
[Android] Notes sur xml
[Android Studio] Je souhaite utiliser une bibliothèque Maven sur Android
J'ai créé une bibliothèque pour afficher des tutoriels sur Android.
Personnaliser la vue de liste sur Android
Utiliser la communication série sur Android
Développement d'applications ROS sur Android
Collection de la bibliothèque Android de "Mercariatte"
Utiliser le code natif sur Android
Gestion des événements avec RxBus sur Android
Comment "évider" une vue sur Android
Commentaire ReactNative Android Bridge
[Android] Obtenez la date du lundi
Obtenez la couverture du code JUnit sur Android.
Une collection de bibliothèques utiles dans le développement Android
Watson Assistant (anciennement Conversation) sur Android
Remarques sur l'appel du programme d'installation sur l'application Android
Enregistrer ArrayList à l'aide de GSON sur Android
Remarques sur le traitement des threads Android (java)
[Android] Recevoir une intention avec le récepteur de diffusion
Implémenter la représentation ondulatoire dans les images sur Android
Accélérez l'acquisition d'informations de localisation sur Android