<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JavaWeb如何實(shí)現(xiàn)本地文件上傳功能

          共 4766字,需瀏覽 10分鐘

           ·

          2021-06-02 09:15

          這篇文章主要介紹了JavaWeb如何實(shí)現(xiàn)本地文件上傳功能,文中通過示例代碼介紹得非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

          Web中的文件上傳主要是分為兩步

          在Web頁面中設(shè)置一個(gè)上傳文件的選項(xiàng),一般是通過<form><input>兩個(gè)標(biāo)簽實(shí)現(xiàn)

          在Servlet類中讀取到上傳的文件,并保存到服務(wù)器中

          記錄實(shí)現(xiàn)步驟前先擼一遍需要注意的幾個(gè)地方,以及兩個(gè)jar包和類的介紹

          需要注意的地方

          <input>輸入項(xiàng)的type屬性設(shè)置為'file',并且必須要設(shè)置name屬性,否則瀏覽器將不會(huì)發(fā)送上傳文件的數(shù)據(jù)

          <form>表單的method屬性必須設(shè)置為'post'方式,enctype屬性設(shè)置為‘multipart/form-data'

          要用到的jar包和類的介紹

          為了解決用戶一次性上傳多個(gè)文件的需求,Apache提供了一個(gè)組件FileUploat,這個(gè)文件實(shí)現(xiàn)了多個(gè)文件同時(shí)上傳而且可以限制上傳文件的大小,使用這個(gè)組件需要去Apache官網(wǎng)下載兩個(gè)jar包:
          commons-fileupload-1.4.jar、commons-io-2.6.jar

          要用到FileUpload組件中的FileItem接口、DiskFileItemFactory類和ServletFileUpload類(這些類里的方法就不寫了,在項(xiàng)目里直接用了)

          用一張圖就可以很清楚地表示出這幾個(gè)類的作用了


          下面就是實(shí)現(xiàn)步驟了

          第一步:導(dǎo)入上面提到的要用到的兩個(gè)jar包

          第二步:創(chuàng)建上傳頁面

          <%-- Created by IntelliJ IDEA. --%>
          <%@ page contentType="text/html;charset=UTF-8" language="java" %>
          <html>
          <head>
          <title></title>

          </head>
          <body>

          <form enctype="multipart/form-data" method="post" action="cn.itcast.fileupload.UploadServlet">

          <%--上傳者--%>
          <input type="text" name="name">
          <%--上傳文件--%>
          <input type="file" name="myfile">
          <input type="submit" value="上傳">

          </form>
          </body>
          </html>

          第三步:創(chuàng)建一個(gè)Servlet類,對上傳的文件進(jìn)行處理

          package cn.itcast.fileupload;

          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.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          import java.io.*;
          import java.util.List;
          import java.util.UUID;

          public class UploadServlet extends HttpServlet {

          private static final long serialVersionUID = 1L;

          @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

          try {
          // 設(shè)置ContentType字段
          resp.setContentType("text/html;charset=utf8");
          // 創(chuàng)建DiskFileItemFactory工廠對象,可以將請求消息實(shí)體中的每一個(gè)文件封裝成單獨(dú)的FielItem對象
          DiskFileItemFactory factory = new DiskFileItemFactory();

          // 設(shè)置文件緩存目錄,如果該文件不存在則新創(chuàng)建一個(gè)
          File f = new File("/Users/liuliu/Desktop/my");
          if (!f.exists()) {
          f.mkdir();
          }

          // 設(shè)置文件的緩存路徑
          factory.setRepository(f);
          // 創(chuàng)建一個(gè)ServletFileUpload對象
          ServletFileUpload fileUpload = new ServletFileUpload(factory);
          // 設(shè)置字符編碼
          fileUpload.setHeaderEncoding("utf-8");

          // 解析request,得到上傳文件的FileItem對象
          List<FileItem> fileItems = fileUpload.parseRequest(req);
          // 獲取字符流
          PrintWriter writer = resp.getWriter();

          // 遍歷對象fileItems對象的List集合
          for (FileItem fileItem : fileItems) {
          // 判斷當(dāng)前的FileItem對象封裝的數(shù)據(jù)是"普通文本表單字段"
          if (fileItem.isFormField()) {
          // 獲得上傳的表單字段的name屬性值
          String name = fileItem.getFieldName();
          if (name.equals("name")) {
          // 如果FileItem對象中保存的數(shù)據(jù)流不為空,則返回一個(gè)字符串,并通過print輸出
          if (!fileItem.getString().equals("")) {
          String value = fileItem.getString("utf-8");
          writer.print("上傳者:" + value + "<br/>");
          }
          }
          } else {//判斷當(dāng)前的FileItem對象封裝的數(shù)據(jù)是"文件表單字段"
          // 獲得上傳文件的文件名
          String filename = fileItem.getName();
          if (fileItem != null && !fileItem.equals("")) {
          writer.print("上傳的文件名稱是" + filename + "<br/>");
          // 截取出文件名
          filename = filename.substring(filename.lastIndexOf("\\") + 1);
          // 給定文件名一個(gè)唯一的id
          filename = UUID.randomUUID().toString() + "_" + filename;

          // 在服務(wù)器中創(chuàng)建同名文件
          String webPath = "/myima/";
          // 將服務(wù)器中文件夾路徑與文件名組合成完整的服務(wù)器端路徑
          String filePath = getServletContext().getRealPath(webPath + filename);

          // 創(chuàng)建文件
          File file = new File(filePath);
          file.getParentFile().mkdir();
          file.createNewFile();

          // 獲得上傳文件流
          InputStream in = fileItem.getInputStream();
          // 打開服務(wù)器端的上傳文件
          FileOutputStream fileOutputStream = new FileOutputStream(file);

          // 流的對拷
          byte buffer[] = new byte[1024];
          int len;
          while ((len = in.read(buffer)) > 0) {
          fileOutputStream.write(buffer, 0, len);
          in.close();
          fileOutputStream.close();
          fileItem.delete();
          writer.print("上傳文件成功");

          }
          }
          }
          }


          } catch (FileUploadException e) {
          e.printStackTrace();
          }
          }


          @Override
          protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
          doGet(req, resp);
          }

          }


          上傳幾個(gè)文件測試了下,可以看到myima文件成功創(chuàng)建了,文件也成功上傳到這里了


          瀏覽 79
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  曰本色黄a大片免费 | 无码啪啪 | 欧美性爱99 | 免费在线观看AⅤ | 成人啪啪啪网站 |