Android--Retrofit文件上传

1、安卓开发–文件上传

本文实例为大家分享了Android使用Retrofit上传文件的具体代码,供大家参考,具体内容如下

1、配置

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
<permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

android:usesCleartextTraffic=“true”

graddle

implementation 'com.squareup.retrofit2:retrofit:2.9.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
implementation "androidx.room:room-runtime:2.4.2"
annotationProcessor "androidx.room:room-compiler:2.4.2"

2、接口类HttpBinServer

package com.ityk.okhttp;

import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.Part;
import retrofit2.http.Query;

public interface HttpBinServer {
	// 请求方式,请求路径
    @POST("comment/answer")
    @Multipart   // 文件
    Call<ResponseBody> upload(@Part MultipartBody.Part file);
}

3、MainActivity

package com.ityk.okhttp;


import androidx.appcompat.app.AppCompatActivity;


import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.textclassifier.TextLinks;
import android.widget.Button;
import android.widget.Toast;

import java.io.File;
import java.io.IOException;

import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {
	// 按钮
    private Button btnPost;
    private OkHttpClient okHttpClient;
    private Retrofit retrofit;
    private HttpBinServer httpBinServer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        btnPost = findViewById(R.id.sp_set);
		
		// 构建Retrofit
        retrofit = new Retrofit.Builder().baseUrl("http://192.168.0.102:8080/").build();
		// 接口
        httpBinServer = retrofit.create(HttpBinServer.class);
		
		// 请求点击事件
        btnPost.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
           		// 上传文件
                File file = new File(MainActivity.this.getFilesDir()+"/111.txt");
                MultipartBody.Part part = MultipartBody.Part.createFormData("file",
                        "111.txt", RequestBody.create(MediaType.parse("text/plain"), file));
                Call<ResponseBody> call = httpBinServer.upload(part);
                call.enqueue(new Callback<ResponseBody>() {
                    @Override
                    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                        try {
                            System.out.println(2222);
                            Log.v("post",response.body().string());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onFailure(Call<ResponseBody> call, Throwable t) {

                    }
                });
            }
        });
    }
}

4、结果

本例中使用的接口用go语言编写,不做多描述

在这里插入图片描述
可以看到,返回值是接受文件的重命名。
在这里插入图片描述
结果这样,就代表上传成功了!

侵删致歉。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值