小白向:web中利用request.getPart()上傳文件到服務器


被文件上傳弄得焦頭爛額的一天,果然web中的路徑和各種設置真的好討厭= =

下面是超級小白的、及其簡約的“詳”解

 

1、明確目的:

  用戶將 1.txt 文件 上傳到 服務器(web工程下的某個文件夾)中

 

2、明確過程

  文件上傳的過程涉及兩個文件, 一個 .jsp文件,和 一個 servlet 文件。

  .jsp文件(upload.jsp):用戶操作頁面 =顯示文件名的文本框+文件選擇按鈕(瀏覽...)+確認上傳按鈕

  servlet文件(uploadServlet.java):根據.jsp中選擇的文件,處理文件上傳

 

3、開始敲代碼(掀桌!)

.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上傳</title>
</head>
<body>    
<form action="upload.do" enctype="multipart/form-data" method="post"> //關鍵句1
    <table>
    <tr> <td>文件名:</td>
          <td><input type="file" name="fileName" size="30" /></td> //關鍵句2
    </tr>
    <tr>
         <td><input type="submit" value="上傳" /></td>
    </tr>
    </table>
</form>
</body>
</html>

  .jsp中的關鍵語句:

  關鍵句1:<form action="upload.do" enctype="multipart/form-data" method="post">    //form中的數據用二進制數據傳輸,可以傳文字,圖片,。。

  關鍵句2:<input type="file" name="fileName" size="30" />    //type 設成“file”就是文件選擇按鈕,自動產生一個 文本框+選擇按鈕

 

 servlet文件:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet(name = "UploadServlet", urlPatterns = { "/upload.do" })
public class UploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public UploadServlet() {
        super();
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");


        String path = this.getServletContext().getRealPath("/");
        // path為工程根目錄:(web工程名為test)
        // D:\tomcat\apache-tomcat-8.0.50-windows-x64\apache-tomcat-8.0.50\webapps\test\

        Part part = request.getPart("fileName");// part代表一個文件
String h = part.getHeader("content-disposition"); // h是要上傳的文件的頭:具體如下(上傳桌面上的account.txt文件)      // form-data; name="fileName"; filename="C:\Users\ASUS\Desktop\account.txt"      //把傳上來的account.txt文件命名為"newFile"保存在服務器中      String fname = "newFile"; //substring是在獲取文件的后綴,改名但是不改后綴 fname = fname + h.substring(h.lastIndexOf("."), h.length() - 1); //按照路徑上傳文件(修改path可以改變文件在服務器中的存儲位置) part.write(path + "\\" + fname); //提示上傳成功 PrintWriter out = response.getWriter(); out.println("<html><head>"); out.println("<title>上傳文件</title></head>"); out.println("<body>"); out.println("<h2>上傳成功!</h2>"); out.println("</body></html>"); } }

 

總結

  我覺得最關鍵的語句是 Part part = request.getPart("fileName"); 我把Part接口理解為文件本身,part.write(path + "\\" + fname);就理解為把part按照括號中的路徑寫進去,這里的路徑是包含文件名稱的,相當於一個盒子,part則是盒子中實際的文件內容。

  獲得文件后綴的方法值得注意。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM