71-上传文件



上传


上传对表单有一些限制
1.method="post"
2.enctype="multipart/form-data"
3.表单中需要添加表单项: <input type="file" name="..."/>

还有
上传对servlet的限制
1.getParameter方法肯定是不能用了,只返回null
2.request.getInputStream()包含整个请求体


多部件表单的体
1.每隔出多个部件,一个表单项一个部件
2.一个部件中自己包含请求头和空行,以及请求体
3.普通表单项
	1个头:content-disposition 包含name="xxx" 表单项名称
	体就是表单项的值
4.文件表单项
	2个头:  1.content-disposition  filename
		2.content-type,例如image/jpeg

		

然后我们来点代码

<form action="" method="post" enctype="multipart/form-data">

    <input type="file" name="file">
    <input type="submit" value="上传">

</form>


现在我们需要用到一个jar包
叫做commons-fileupload-1.3.3.jar
它会帮我们解析request中的上传数据
解析后的结果是一个表单项数据封装到一个fileItem对象中
我们只需要调用fileItem的方法就可以了

相关类:
1.工厂	 	DiskFileItemFactory
2.解析器	ServletFileUpload
3.表单项	FileItem

FileItem
1.isFormField() true为普通表单项,false为文件表单项
2.getFieldName() 返回当前表单项的名称
3.getString()	获取表单项的值
4.getName()	上传文件的名称
5.getSize()	上传文件的字节数
6.getInputStream()	上传文件对应的输入流


现在我们来点代码


先来一个表单呗

<html>
<head>
    <title>主页</title>
</head>
<body>

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>

</body>
</html>



然后是servlet



public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");

        //创建factory对象
        DiskFileItemFactory factory = new DiskFileItemFactory();

        //根据factory创建upload对象
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {

            //解析request,得到item集合
            List<FileItem> itemList = upload.parseRequest(req);

            //获取集合第一个item
            FileItem item = itemList.get(0);

            //创建文件
            File file = new File("D:/abc.jpg");

            //写入文件
            item.write(file);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}












 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值