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

Posted 洛小侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小白向: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则是盒子中实际的文件内容。

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

 


以上是关于小白向:web中利用request.getPart()上传文件到服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Part类型的参数单元测试方法?

小白科普Web安全基础之SQL注入XSS文件上传漏洞详解

简单的上传文件和下载文件

XSS小白基础篇

前端小小白的学习之路HTML5最佳实践web app

文件上传 struct中 注入的file属性获取不到