分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

Servlet笔记2-文件上传

发布时间:2023-09-06 01:36责任编辑:顾先生关键词:文件上传

Servlet上传文件:
  Servlet 3.0改进了部分API,其中HttpServletRequest增加了对文件上传的支持。

  HttpServletRequest提供了两个方法来处理文件上传:
    1.Part getPart(String name):根据名称来获取文件上传域

    2.Collection<Part> getParts():获取所有的文件上传域

  上面两个方法的返回值都涉及一个API:Part,每个Part对象对应于一个文件上传域,该对象提供了很多方法来范文上传文件的文件类型、大小、输入流等,并提供了一个write(String file)方法将上传文件写入服务器磁盘。

  向服务器上传文件,表单里要使用<input type="file" .../>,并且,上传文件一定要为表单域设置enctype属性。
表单的enctype属性指的是表单数据的编码方式,该属性有三个值:
  1.application/x-www-form-urlencoded:默认的编码方式,只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式

  2.multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里

  3.text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件的方式

  文件上传示例:

  页面jsp:

<%-- ?Created by IntelliJ IDEA. ?User: Administrator ?Date: 2018/1/4 ?Time: 16:46 ?To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head> ???<title>Servlet文件上传</title></head><body> ???<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data"> ???????普通参数:<input type="text" name="inputText" ><br> ???????选择文件:<input type="file" name="file" ><br> ???????<input type="submit" value="上传"> ???</form></body></html>

  Servlet程序:

/** * Description:servlet * Author: Eleven * Date: 2018/1/13 16:23 */@WebServlet(name="upload",urlPatterns = "/upload")@MultipartConfig ?//处理文件上传的Servlet,必须要加此注解public class UploadServlet extends HttpServlet{ ???@Override ???protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ???????//解决接收参数为中文乱码的问题 ???????request.setCharacterEncoding("UTF-8"); ???????//解决向页面输出内容为乱码,即使用out.println()的时候 ???????response.setContentType("text/html;charset=UTF-8"); ???????PrintWriter out = response.getWriter(); ???????//获取普通请求参数 ???????String inputText = request.getParameter("inputText"); ???????System.out.println("普通的参数为:"+inputText); ???????//获取文件上传域 ???????Part part = request.getPart("file"); ???????//文件的上传类型 ???????System.out.println("文件的上传类型:"+part.getContentType()); ???????//文件上传的大小 ???????System.out.println("上传文件的大小:"+part.getSize()); ???????//文件上传域的Header Name ???????Collection<String> headerNames = part.getHeaderNames(); ???????//遍历文件上传域的Header Name Value ???????for(String headerName:headerNames){ ???????????System.out.println(headerName+"---->"+part.getHeader(headerName)); ???????} ???????//获取包含原始文件名的字符串 ???????String fileNameInfo = part.getHeader("content-disposition"); ???????//提取上传文件的文件名 ???????String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename=\"")+10,fileNameInfo.length()-1); ???????//将文件写入服务器磁盘 ?保存在web应用根路径下的upload文件下 ???????part.write(getServletContext().getRealPath("upload")+"/"+fileName); ???????out.println("文件上传成功!"); ???}}

  

  对于传统的文件上传需要借助common-fileupload等工具,处理起来有点复杂,借助Servlet 3.0的API,处理文件就变得比较简单了。

Servlet笔记2-文件上传

原文地址:https://www.cnblogs.com/eleven258/p/8286650.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved