小白向: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()上传文件到服务器的主要内容,如果未能解决你的问题,请参考以下文章