zoukankan      html  css  js  c++  java
  • 小白向: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:	omcatapache-tomcat-8.0.50-windows-x64apache-tomcat-8.0.50webapps	est
    
            Part part = request.getPart("fileName");// part代表一个文件
    String h = part.getHeader("content-disposition"); // h是要上传的文件的头:具体如下(上传桌面上的account.txt文件)      // form-data; name="fileName"; filename="C:UsersASUSDesktopaccount.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则是盒子中实际的文件内容。

      获得文件后缀的方法值得注意。

     

  • 相关阅读:
    表格文字溢出用省略号代替处理方法
    【Linux】Mysql5.7.12源码编译安装及配置
    【Linux】JDK安装及配置
    [SDOI2017]序列计数
    P1777 帮助_NOI导刊2010提高(03)
    BSGS和EXBSGS
    排列最小值
    三元组[01 Trie计数]
    数学题
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team [单调栈上二分]
  • 原文地址:https://www.cnblogs.com/luiyuying/p/usegetpart.html
Copyright © 2011-2022 走看看