本周博客
主要针对上传和下载做一下总结。
上传文件
1:首先导入两个jar包
在maven网址上搜索
Apache-commons-fileupload.jar
和Apache-commons-io.jar
代码部分
注意:由于个别原因,请勿ctrl+c
前端JSP
表单提交方式必须为post,因为get输入地址栏中只有4k的容量,不足以容纳文件,造成上传受阻。
在表单中必须增加一个属性 (编码类型)enctype=“multipart/form-data”
至此前台搞定。
<form action="UploadServet" method="post" enctype="multipart/form-data">
学号:<input name="sno" /><br/>
姓名:<input name="sname" /><br/>
上传图片:<input type="file" name ="spicture"/>
<br/>
<input type="submit" value ="注册"/>
</form>
后端Servlet
注意:由于个别原因,请勿ctrl+c
public class UploadServet extends HttpServlet {
private static final long serialVersionUID = 1L;
public UploadServet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
//上传
try {
boolean isMultipart= ServletFileUpload.isMultipartContent(request);
if(isMultipart) {//判断前台的form是否有multipart属性
//FileItemFactory factory = new DiskFileItemFactory();
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload =new ServletFileUpload(factory);
//通过parseRequest解析form中的所有请求字段,并保存到iems集合中(既前台传递的sno)
List<FileItem>items = upload.parseRequest(request);
//遍历items中的数据(sno sname spicture)
Iterator<FileItem> iter =items.iterator();
while(iter.hasNext()) {
FileItem item =iter.next();
String itemName =item.getFieldName();
int sno=-1;
String sname=null;
//判断前台字段 是普通form表单字敦(sno sname),还是文件字段
if(item.isFormField()) {
if(itemName.equals("sno")) {//根据name属性 判断item是sno snamehi还是spicture
sno=Integer.parseInt(item.getString("UTF-8"));
}else if(itemName.equals("sname")) {
sname=item.getString("UTF-8");
}else {
System.out.println("其他字段。。。");
}
}
//获取文件内容并上传
//文件定义路径,指定上传的位置(服务器路径)
String path = request.getSession().getServletContext().getRealPath("upload");
File file =new File(path,fileName);
item.write(file);//上传
System.out.println(fileName+"上传成功!");
return;
}
}
}
}catch(FileUploadException e) {
e.printStackTrace();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
注意问题:
上传的目录upload:
1.如果修改代码,则在tomcat重新启动时,会被删除
原因:当修改代码时,tomcat会重新编译一份class并重新部署,创建各种目录。
2.如果不修改代码,则不会删除
原因:没有修改代码,class任然时之前的class
因此,为了防止上传目录丢失:a。虚拟路径 b.直接更换上传目录 到非tomcat目录。
限制上传:
类型,大小,注意:对文件的限制条件写再parseRequest之前
3.下载:不需要依赖任何jar
a.请求(地址 a form),请求Servlet
b.Servlet通过文件的地址 将文件转为输入流 读到Serrvlet中。 c.通过输入流 将刚才已经转为输入流的文件 输出给用户
注意:下载文件。需要设置两个响应头
因为本次博客内容仅仅方便作者回顾使用,需要详细内容请https://www.bilibili.com/video/BV18s411u7EH?p=36&spm_id_from=pageDriver
我与你像星辰守护大海
直到那天
你撞上一颗恒星
我的眼中便没了你的光影