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语言编写,不做多描述
可以看到,返回值是接受文件的重命名。
结果这样,就代表上传成功了!
侵删致歉。