本文共 1933 字,大约阅读时间需要 6 分钟。
理解文件上传我觉得还是需要一些JavaWeb方面的知识,比如什么是表单了,等等
博主先用现学了下,理解也不咋透彻,所以先记录下,有不对的欢迎指正。 先上一下文件上传的代码,代码 客户端Android代码:okHttpClient = build(); MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); //第一个参数要与Servlet中的一致 builder.addFormDataPart("file", files.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), files)); MultipartBody multipartBody = builder.build(); Request request = new Request.Builder().url(url).post(multipartBody).build(); okHttpClient.newCall(request).enqueue(callback);
客户端代码我有两个疑问:
上面两个问题引出了这篇文章
服务器代码:
System.out.println("doPost=="); request.setCharacterEncoding("utf-8"); //获取file命名的part,注意要与Android端一样 Part part = request.getPart("file"); // 获取请求头,请求头的格式:form-data; name="file"; filename="snmp4j--api.zip" String header = part.getHeader("content-disposition"); System.out.println(header); String fileName = getFileName(header); // 存储路径 String savePath = "/Users/apple/Documents"; // 把文件写到指定路径 part.write(savePath + File.separator + fileName); response.setCharacterEncoding("UTF-8"); PrintWriter writer = response.getWriter(); writer.print("上传成功");
这个file就相当于表单里面的字段,一般写到jsp里面。
<%@ page language="java" pageEncoding="UTF-8"%>文件上传
type为file
当我们在浏览器或者我们Android客户端,上传文件的时候,要和表单的file对应上,所以,builder.addFormDataPart("file", files.getName(), RequestBody.create(MediaType.parse("application/octet-stream"), files));
这句话要把file加上。 MultipartBody
我们提交普通键值对类型表单的时候Content-Type默认为application/x-www-form-urlencoded
,在OkHttp中可以使用FormBody.Builder
去提交该种类表单。 当我们提交文件的时候Content-Type应该为multipart/form-data