被文件上传弄得焦头烂额的一天,果然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则是盒子中实际的文件内容。

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

最新文章

  1. css实现文本溢出显示...
  2. Android基础测试题(二)
  3. 详细说说 Google Test Certified 的各级——Level 1
  4. iptables实现负载均衡
  5. SDUT图结构练习——最小生成树
  6. iOS开发--混编篇&amp;swift与OC混合使用
  7. MVC小系列(十一)【Html.BeginForm与Ajax.BeginForm】
  8. eclipse中配置c++开发环境 Eclipse + CDT + MinGW
  9. boost在自己主动确定数据类型(BOOST_TYPEOF和BOOST_AUTO)使用
  10. Android中PropertyAnimation属性动画详解(一)
  11. 03-HTML的body标签(文本标签)学习
  12. QT自定义控件系列(二) --- Loading加载动画控件
  13. android应用程序中获取view的位置
  14. 让你分分钟了解Web接口测试
  15. 关于const的一些注意事项
  16. ajax本地跨域请求以及解决方法
  17. C#的Dispose模式复习
  18. python蛋痛的依赖管理
  19. AC日记——[ZJOI2015]幻想乡战略游戏 洛谷 P3345
  20. 非root配置linux下vim

热门文章

  1. 【Oracle】DG中 Switchover 主、备切换
  2. 杭电 2095 find your present (2)【位运算 异或】
  3. 杭电 1021 Fibonacci Again
  4. 关于Java学习
  5. java 读取配置文件(nx就转了)
  6. 【前端】CSS隐藏元素的方法和区别
  7. Nginx1.14.2新增tcp/udp代理stream
  8. Linux分布式测试
  9. python中的全局变量、局部变量、实例变量
  10. 使用maven创建springMVC时返回页面报错