首先定义上传的接口API
public interface FileUploadService {
@Multipart
@POST("upload.action")
public abstract Observable<String> upLoadFiles(@PartMap Map<String, RequestBody> paramMap,
@QueryMap Map<String, String> paramMap1);
}
当然里面的参数可以随便定义,匹配传输类型即可;
private Retrofit mRetrofit;
private final static String url = "http://localhost:8080/ProjectName/";
private Retrofit getRetrofit() {
if (mRetrofit == null)
mRetrofit = new Retrofit
.Builder()
.addConverterFactory(ScalarsConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.baseUrl(url)
.client(genericClient())
.build();
return mRetrofit;
}
自定义OkhttpClient ,增加头文件;
public static OkHttpClient genericClient() {
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8")
.addHeader("Accept-Encoding", "gzip, deflate")
.addHeader("Connection", "keep-alive")
.addHeader("Accept", "*/*")
.addHeader("Cookie", "add cookies here")
.build();
return chain.proceed(request);
}
})
.build();
return httpClient;
}
最关键的是这个;
FileUploadService fileUpLoad = getRetrofit().create(FileUploadService.class);
Observable<String> observable = service.upLoadFiles(getFiles(),getStrings());
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
showLog("completed");
}
@Override
public void onError(Throwable e) {
showLog("onerror");
}
@Override
public void onNext(String o) {
showLog("on next");
}
});
数据源:
private Map<String, RequestBody> getFiles()
{
HashMap localHashMap = new HashMap();
File f = new File("file");
RequestBody localRequestBody = RequestBody.create(MediaType.parse("application/otcet-stream"), f);
localHashMap.put(f.getName() + "\"; filename=\" " + f.getName(), localRequestBody);
return localHashMap;
}
private Map<String, String> getStrings()
{
Map localHashMap = new HashMap();
localHashMap.put("key", "value");
return localHashMap;
}
具体的应用就是这样
参考:
Retrofit – Java(Android) 的REST 接口封装类库
Retrofit 2.0:有史以来最大的改进
Retrofit网络请求Service,@Path、@Query、@QueryMap…