1. 程式人生 > 實用技巧 >Ajax檔案上傳,Servlet解析並下載--程式碼

Ajax檔案上傳,Servlet解析並下載--程式碼

--使用依賴包

commons-fileupload-1.4.jar
commons-io-2.6.jar
hutool-all-5.2.3.jar

--html

檔案上傳測試
<form action="" method="post" enctype="multipart/form-data">
    名字<input type="text" id="username">
    檔案<input type="file" id="filecontent">
    <input type="button" value="提交" id="button_id"
> </form>

--js

$("#button_id").click(() => {
  let formData = new FormData();
  formData.append("name", $("#username").val());
  formData.append("file", $("#filecontent")[0].files[0])
  $.ajax({
    url: "<%=request.getContextPath()%>/HasUserNameServlet",
    async: true,
    data: formData,
    success: 
function (res) { console.log(res) }, processData: false, //告訴jquery要傳輸data物件 contentType: false, type: "post", dataType: "json" }); });

--servlet

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.util.IdUtil;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; @WebServlet("/HasUserNameServlet") public class HasUserNameServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // 1.建立磁碟檔案項工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2.建立核心解析器物件 ServletFileUpload fileUpload = new ServletFileUpload(factory); // 3.解析request請求,返回list集合 List<FileItem> list = fileUpload.parseRequest(request); // 4.遍歷list,獲取上傳項 for (FileItem fileItem : list) { // 5.判斷是檔案項還是普通項 if (fileItem.isFormField()) { // a.獲取name屬性 String name = fileItem.getFieldName(); // b.獲取value屬性 String value = fileItem.getString(); System.out.println("普通文字項:" + name + "=" + value); } else { // 上傳檔案項 // a.獲取檔名 String filename = fileItem.getName(); // 獲取上傳副檔名 String extName = FileUtil.extName(filename); // 生成隨機檔名 filename = IdUtil.simpleUUID() + "." + extName; // b.獲取檔案位元組輸入流 InputStream in = fileItem.getInputStream(); System.out.println("上傳檔名:" + filename + ",上傳檔案流:" + in); // c.獲取伺服器upload目錄真實路徑... String realPath = request.getServletContext().getRealPath("/upload/"); // d.設定檔案位元組輸出流 FileOutputStream out = new FileOutputStream(new File(realPath + filename)); // 流的copy IoUtil.copy(in, out); // 關流 out.close(); in.close(); response.getWriter().write("sucess"); } } } catch (Exception e) { e.printStackTrace(); } } }