記錄OkHttp上傳檔案
阿新 • • 發佈:2019-02-09
理解檔案上傳我覺得還是需要一些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);
客戶端程式碼我有兩個疑問:
- 為什麼用MultipartBody,這個MultipartBody是什麼
- file是什麼意思,為什麼要跟Servlet中的一致
上面兩個問題引出了這篇文章
伺服器程式碼:
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"%>
<!DOCTYPE HTML>
<html>
<head>
<title>檔案上傳</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post">
上傳使用者:<input type="text" name="username"><br/>
上傳檔案1:<input type="file" name="file1"><br/>
上傳檔案2:<input type="file" name="file2"><br/>
<input type="submit" value="提交">
</form>
</body>
</html>
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
四種常見的 POST 提交資料方式
Multipart/form-data POST檔案上傳詳解