1.上传文件:
//上传图片
@Multipart
@POST("static/image")
Observable<NetResult> upLoadImage(
@Part("image\"; filename=\"avatar.png\"") RequestBody image);
part标注的内容表示上传的文件对应接口的image字段,不代表文件类型,文件名是avatar.jpg。方法需要一个请求体作为参数。
构建请求体:
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"),file);
传入文件,并解析为image类型就可以了。视频改成video就行了
2.获取响应的cookie:
既然要获取响应头里的cookie,就不能使用这种接口方法的方式,因为这里只能返回响应体以及转换器转换后的数据。
所以采取okhttp方式:
OkHttpClient client=new OkHttpClient();
RequestBody body=RequestBody.create(MediaType.parse("text/plain"),"content");
Request request=new Request.Builder()
.url(NetUtil.HOST+"common/testLogin")
.post(body)
.build();
Call call=client.newCall(request);//将请求封装成任务
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
ResponseBody body=response.body();
String s=body.string();
try {
JSONObject obj=new JSONObject(s);
switch (obj.getInt("status")){
case 200:
String cookie=response.header("Set-Cookie");
Log.d("tag",cookie);
getList();
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
其实就是调用response.cookie("Set-Cookie")方法获取这个字段的数据。
发送请求时带cookie(在构建retrofit对象时放置):
retrofit=new Retrofit.Builder()
.baseUrl(NetUtil.HOST)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.client(new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request()
.newBuilder()
.addHeader("Cookie", NetUtil.cookie)
.build();
return chain.proceed(request);
}
}).build())
.build();
核心就是addHeader("Cookie"," "),把cookie放在请求头里