Servlet3.0文件上传

在Servlet3.0之前上传文件需要借助第三方jar包才能实现,比如common-upload.jar和common-io.jar

但是在Servlet3.0之后上传文件变得很便捷,因为是特性提供的内置方法接口

Servlet3.0后,只需要在类前加上注解 @MultipartConfig 就可以指定该servlet具备上传特性

并且该注解提供了几个属性:

maxFileSize,maxRequestSize,location(将上传的文件保存到磁盘的指定位置,调用Part中write方法就会调用它),fileSizeThreshold(设定一个溢出值,超过这个值将写入磁盘)

这里有关于location的一个注意点:这里如果指定了location的值,那么在Part接口中write提供path属性后,如果path是绝对地址,那么文件写入这个绝对地址,如果是相对地址,则是相对于location的地址

下面是Part接口的方法:


以下是一个简短的demo

package upload;

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(urlPatterns={"/upload.do"})

//这个注解是可以配置信息的,比如文件临时存放目录,文件大小等等
@MultipartConfig()

public class uploadServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setContentType("text/html");
		resp.setCharacterEncoding("utf-8");
		Part part = req.getPart("Image");
		String fileName = getName(part);
		PrintWriter printWriter =  null;
		printWriter = resp.getWriter();
		if(fileName==null){
			printWriter.println("

请上传有效的文件

"); printWriter.flush(); }else{ //通过判断限制文件上传的格式 if(!"png".equalsIgnoreCase(fileName.substring(fileName.indexOf('.')+1))){ printWriter.println("

只允許PNG文件

"); printWriter.flush(); return; } String path = req.getServletContext().getRealPath(("/File/"+fileName)); part.write(path); printWriter.println("

文件名:"+fileName+"

"); printWriter.println("

文件大小:"+part.getSize()+"

"); printWriter.flush(); } if(printWriter!=null){ printWriter.close(); } } private String getName(Part part){ String name = null; String ct = part.getContentType(); if(part==null) return name; if(ct==null) return name ;//当执行文件上传的时候,ContentType不为空 String disposition = part.getHeader("content-disposition"); String[] elements = disposition.split(";"); for(String ele:elements){ if(ele.trim().startsWith("filename")){ name = ele.substring(ele.indexOf('=')+1).trim().replace("\"", ""); return name; }else{ continue; } } return name; } }
<%@ 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>upload</title>
</head>
<body>
	<form action="upload.do" method="post" enctype="multipart/form-data">
		filename:<input type="file" name="Image">
		<input type="submit" value="upload">
	</form>
</body>
</html>

运行结果:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值