正常返回的数据是流 可以读成图片 但是异常的时候返回的是对象(字段) 这种时候需要判断情况,就是说分别获取流文件的对象信息,而Response.body()这个只能用一次,所以推出这个解决方法
import okhttp3.*;
import okio.Buffer;
import okio.BufferedSource;
import java.io.*;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
public static void main(String[] args) throws Exception {
OkHttpClient client = new OkHttpClient().newBuilder()
.build();
Request request = new Request.Builder()
.url("http://127.0.0.1:8080/test/duizhang")
.build();
Response response = client.newCall(request).execute();
ResponseBody body = response.body();
BufferedSource source = body.source();
source.request(Long.MAX_VALUE);
Buffer buffer = source.buffer();
String responseBodyString = buffer.clone().readString(Charset.forName("UTF-8"));
System.out.println(responseBodyString);
InputStream is = body.byteStream();
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流(后缀名)
File sf=new File("F://文件接收");
if(!sf.exists()){
sf.mkdirs();
}
// 新的图片文件名 = 编号 +"."图片扩展名
OutputStream os = new FileOutputStream(sf.getPath()+"\\"+sf.getName());
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完毕,关闭所有链接
os.close();
is.close();
System.out.println("程序执行完毕");
}