LoadServlet端代碼
package com.iweb.servlet;
import com.google.gson.Gson;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.*;
@WebServlet("/upload/*")
// 在3.0之後
// servlet會將上傳的請求封裝成 一個Part對象
// 文件的類型、文件的大小、文件名稱、文件內容(IO流)
// 接收文件上傳的上下文類型 multipart/form-data
@MultipartConfig
public class UploadServlet extends HttpServlet {
/**
* 3.0之後,servlet會將上傳的請求封裝成一個Part對象,我們只需要操作Part對象就可以了
* 文件的類型、文件的大小、文件名稱、文件內容(IO流)
*
* @param req
* @param resp
* @throws ServletException
* @throws IOException
*/
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("upload....");
// 獲取文件封裝的Part對象
Collection<Part> parts = req.getParts();
// 單個文件上傳
String fullFileName = "";
if (parts.size() == 1) {
//默認傳遞過來的是file
Part part = req.getPart("file");
String name = part.getName();
String filename = part.getSubmittedFileName();
String type = part.getContentType();
InputStream stream = part.getInputStream();
System.out.println("key: " + name);
System.out.println("文件名稱: " + filename);
System.out.println("文件類型: " + type);
// 生成文件名稱:在外面的業務中,這裏可以查詢(session中)當前用戶的id,要加後綴名
fullFileName = UUID.randomUUID().toString().replace("-", "") + "-" + filename;
// 寫出文件
part.write("D:\\env\\nginx-1.8.1\\static\\avatar\\" + fullFileName);
}
// 多個文件上傳,不用
// 爲什麼不用:如果上傳了20個文件,對於當前請求,servlet的請求會開啓一個線程
// 一般情況下,多個文件上傳,前端會通過異步請求
if (parts.size() > 1) {
Iterator<Part> its = parts.iterator();
// 遍歷每個Part對象
}
PrintWriter writer = resp.getWriter();
Map<String,String> map = new HashMap<>();
map.put("message", "ok");
// 生成圖片訪問路徑,並返回
map.put("src", "http://localhost:80/avatar/" + fullFileName);
writer.println(new Gson().toJson(map));
writer.flush();
writer.close();
}
}