java 圖片url以form-data方式上傳

之所以想記錄下來,主要是之前對這個不太熟,然後在網上找了大半天也沒找到合適的,然後自己慢慢試了出來,比較囧。。。但分享給大家,親測可用!

主要分爲兩步:
1. 將圖片url轉爲二進制字符串;
2. 將二進制字符串以及其他字段一併上傳。

直接上代碼:

public class HttpClient {

    public static final OkHttpClient client =
            new OkHttpClient.Builder()
                    .connectTimeout(10, TimeUnit.SECONDS)
                    .readTimeout(10, TimeUnit.SECONDS)
                    .build();

    public static String getResponse(String url, String imgUrl) throws IOException {

        RequestBody fileBody = RequestBody.create(MediaType.parse("image/jpeg"), getFile(imgUrl));

        RequestBody requestBody = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("param1", param1)
                .addFormDataPart("param2", param2)
                .addFormDataPart("image", "image", fileBody)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {

            return response.body().string();
        } else {

            throw new RuntimeException(response.body().string());
        }
    }

    private static byte[] getFile(String imgUrl) throws IOException {

        Request request = new Request.Builder()
                .url(imgUrl)
                .build();
        Response response = client.newCall(request).execute();
        if (response.isSuccessful()) {
            return response.body().bytes();
        } else {
            throw new RuntimeException(response);
        }
    }
}

其中OkHttpClient包請自行導入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章