使用OkHTTP来调用restful接口上传文件

首先想要了解okhttp相关功能,请查看文章:http://blog.csdn.net/win7system/article/details/51697884,

闲话就不多说了,直接来干货

okhttp接口

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

import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;

public class PostMultipart {
   
    private static final String IMGUR_CLIENT_ID = "9199fdef135c122";
    private static final MediaType MEDIA_TYPE_DATA = MediaType.parse("multipart/form-data");
 
    private final OkHttpClient client = new OkHttpClient();
 
    public void run(String url, String filePath) throws Exception {
        
        File file = new File(filePath);
 
        RequestBody requestBody = new MultipartBuilder()
                .type(MultipartBuilder.FORM)
                .addFormDataPart("filename", file.getName())
                .addFormDataPart("file", file.getName(),
                        RequestBody.create(MEDIA_TYPE_DATA, file))
                .build();
 
        Request request = new Request.Builder()
                .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
                .url(url)
                .post(requestBody)
                .build();
 
        Response response = client.newCall(request).execute();
        if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
 
        System.out.println(response.body().string());
    }
 
}

restful接口


	@POST
	@Path("/upload")
	@Consumes(MediaType.MULTIPART_FORM_DATA)
	@Produces(MediaType.APPLICATION_JSON)
	public Response uploadFile(@FormDataParam("file") InputStream uploadedInputStream,
			@FormDataParam("file") FormDataContentDisposition fileDetail, @FormDataParam("filename") String filename)
			throws IOException {
		System.out.println("文件创建时间:" + fileDetail.getFileName());
		System.out.println("文件名字:" + filename);

		File file = new File("D:\\demo\\"+fileDetail.getFileName());
		if (!file.exists())
			file.createNewFile();
		FileOutputStream out = new FileOutputStream(file);
		int c;
		byte buffer[] = new byte[1024];
		while ((c = uploadedInputStream.read(buffer)) != -1) {
			for (int i = 0; i < c; i++)
				out.write(buffer[i]);
		}
		Map map = new HashMap();
		map.put("文件读取日期", fileDetail.getReadDate());
		map.put("文件大小", fileDetail.getSize());
		map.put("文件类型", fileDetail.getType());
		map.put("文件读取", uploadedInputStream.read());
		uploadedInputStream.close();
		out.close();
		return Response.status(200).entity(map).build();
	}

另外需要在web.xml下添加一个初始化参数才能起作用


jersey.config.server.provider.classnames
org.glassfish.jersey.filter.LoggingFilter;org.glassfish.jersey.media.multipart.MultiPartFeature
org.glassfish.jersey.filter.LoggingFilter是可以打印出jersey上传文件时候的日志,可以选择也可以不用选择

如果是maven项目还需要导入如下包


			org.glassfish.jersey.media
			jersey-media-multipart
			2.22.2
		

你可能感兴趣的:(跨系统调用之OkHttp)