[Servlet3.0]Serlvet文件上传

Servlet 3.0的另一个新特性就是提供了处理文件上传的功能,使用Servlet 3.0的内容实现文件上传需要以下几个内容:

  • 在处理文件上传的Servlet上增加@MultipartConfig注解,表示当前Servlet符合MIME类型的multipart/form-data。
Optional Element Summary
int fileSizeThreshold
java.lang.String location
long maxFileSize
long maxRequestSize
  • Part接口,表示允许接收MIME类型是multipart/form-data类型的POST请求。
Method Summary
void delete()
java.lang.String getContentType()
java.lang.String getHeader(java.lang.String name)
java.util.Collection<java.lang.String> getHeaderNames()
java.util.Collection<java.lang.String> getHeaders(java.lang.String name)
java.io.InputStream getInputStream()
java.lang.String getName()
long getSize()
void write(java.lang.String fileName)

利用Servlet 3.0实现文件上传的功能,具体实现代码如下:

  • 创建一个JSP页面用于文件上传显示。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP ‘index.jsp‘ starting page</title>
  </head>
  <body>
    <form action="uploadFile" method="post" enctype="multipart/form-data">
        文件描述:<input type="text" name="filetext"><br>
        <input type="file" name="upload"><br>
        <input type="submit" value="上传">
    </form>
  </body>
</html>
  • 创建一个Servlet用于处理文件上传逻辑。
@WebServlet(urlPatterns="/uploadFile")
@MultipartConfig(
fileSizeThreshold = 10 * 1024,//缓存大小,当上传的文件超出这个大小时会生成临时文件
location = "/temp",// 存放临时文件的目录
maxFileSize = 5 * 1024,// 单个文件大小限制
maxRequestSize = 10 * 1024// 整个请求大小限制
)
public class UploadFileServlet extends HttpServlet {
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 处理请求中文乱码
        req.setCharacterEncoding("utf-8");
        // 接收上传文件的描述内容
        String filetext = req.getParameter("filetext");
        // 接收上传文件的内容
        Part part = req.getPart("upload");
        // 获取上传文件的真实名称
        String cd = part.getHeader("Content-Disposition");
        int index = cd.indexOf("filename=\"") + 10;
        String filename = cd.substring(index, cd.length() - 1);
        // 读取上传目录的绝对路径
        String path = getServletContext().getRealPath("/upload");
        // 将上传文件进行保存
        part.write(path + "/" + filename);
    }
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
}


转载说明:请注明作者及原文链接,谢谢!

时间: 2024-12-14 12:20:49

[Servlet3.0]Serlvet文件上传的相关文章

Servlet3.0学习总结——基于Servlet3.0的文件上传

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 <%@ page language="java&

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传

Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不需要借助任何第三方上传组件,直接使用Servlet3.0提供的API就能够实现文件上传功能了. 一.使用Servlet3.0提供的API实现文件上传 1.1.编写上传页面 1 <%@ page language="jav

servlet3.0的文件上传代码配置怎么写

之前学习过xml配置servlet3.0的文件上传,但是变成code方式一直不知道怎么弄,相比较起来apache的文件上传配置和xml倒是没什么太大区别. 直接上代码:无需依赖,只要一个方法就好了customizeRegistration() public class SystemConfig extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected Class<?>[] getRoot

Spring MVC3.2 通过Servlet3.0实现文件上传

Servlet3.0规范增加了对文件上传的原生支持,这里记录一下Spring MVC3通过Servlet3上传文件的实现. 配置文件: applicationContext.xml <!-- spring mvc3+servlet3上传文件需要配置 --><beanid="multipartResolver"class="org.springframework.web.multipart.support.StandardServletMultipartRes

yii2.0单文件上传和多文件上传

yii2文件上传使用到yii2自带的文件上传类UploadFIle,以及对应的模型规则,这里分别介绍单文件上传和多文件上传: yii2单个文件上传: 上传步奏,先创建上传表单模型model(包含验证规则),其次控制器操作action,以及相对应的view: model层: Upload.php  [单文件上传模型] <?php namespace app\models;use Yii;use yii\base\Model; class Upload extends Model{ public $

Yii2.0 多文件上传

--------------------------------------------------------------------------------------------------- 首先你得调整模型类,在 file 验证规则里增加一个 maxFiles 选项,用以限制一次上传文件的最大数量. upload()方法也得修改, 以便一个一个地保存上传的文件. --------------------------------------------------------------

PHPcms9.6.0任意文件上传漏洞直接getshell 利用教程

对于PHPcms9.6.0 最新版漏洞,具体利用步骤如下: 首先我们在本地搭建一个php环境,我这里是appserv或者使用phpnow (官网下载地址:http://servkit.org/) (只要可以执行php文件就行) 在根目录下新建一个txt文本文件里面写上php一句话,如上图可以访问 接着我们找到phpcms网站注册模块,随便填一下信息 然后我们用burpsuite抓包 (有关burpsuite工具和相关使用教程可以参考前面的文章:https://www.exehack.net/ta

【渗透测试】PHPCMS9.6.0 任意文件上传(可getshell)

这个漏洞是某司的一位前辈发出来的,这里只是复现一下而已. 原文地址:https://www.t00ls.net/thread-39226-1-1.html 首先我们本地搭建一个phpcms9.6.0的环境 下载地址:http://www.mycodes.net/43/3365.htm 点击注册页面,进行抓包 在本地创建一个txt文本,写入一句话木马 POC siteid=1&modelid=11&username=seven1&password=seven123456&[e

yii2.0 单文件上传

$fileobj = UploadedFile::getInstanceByName('file'); \Helper::SaveUploadFile($fileobj, 'openfireimg'); public static function SaveUploadFile($file, $folder) { if(empty($file) || empty($folder)) { return false; } $time = time(); $targetPath = self::get