Retrofit 2は画像のアップロードを実現し、以前はOkhttpを単純に使用していたコードと比較した.

2079 ワード

以前はokhttpで直接アップロードしていましたが、実はあまり悪いところはありませんでした.ただ、后で他の需要があって、何枚かの画像をアップロードする必要があります.バックグラウンドは1枚の画像をアップロードするインタフェースです.前は书いたコールバックの中にコールバックが入っていました.コードロジックには问题はありませんが、コードが混乱していて、メンテナンスが容易ではありません.私は后でRxjavaのフレームワークに参加しました.
それでは私达はどのように书くことを见て、具体的な使い方の原理などの私は缲り返して車輪を作らないで、自分で探して、きっと1山1山探します
ダイレクトコード
Retrofitを使わない前に、Okhttpのコードを単純に使う
 RequestBody fileBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);

        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addPart(Headers.of("Content-Disposition", "form-data; name=\"file\"; filename=\""+fileName+".png\""), fileBody)
                .build();

        Request request = new Request.Builder()
                .url(url)
                .post(requestBody)
                .build();

        Call call = new OkHttpClient().newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
            }

            @Override
            public void onResponse(final Response response) throws IOException {
            }
        });

Retrofitを使用した後
/**      */
    @Multipart
    @POST
    Observable uploadImages(
            @Url String url,
            @Part MultipartBody.Part part);
File file = new File(path);
            RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file);
            MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), requestBody);
uploadImages(url,part)

rxjavaのオペレータを併用することで、バックグラウンドインタフェースが1枚のアップロードであることを完璧に解決できますが、複数のアップロードシーンが必要です
使用するときは、いくつかのフィールドの名前に注意し、バックグラウンドと共同で定義する必要があります.
ネット上で多くのRetrofitが画像をアップロードする方法を検索することができて、直接copyすることもできなくて、あなたはいくつかのフィールドの命名とあなた达のバックグラウンドの一致するかどうかを見る必要があります
【より多くの開発実用技術をクリックしてください】