• servlet上传文件


    上传的文件一般保存在运行项目中,把可访问的地址保存在数据库中

    servlet上传文件需要的jar包:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">

    <title>This is my JSP page</title>

    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

    </head>

    <body>
    <!--

    要上传文件的时候 一定要将 form 设置为 post 还要将 form 的 enctype设置为 multipart/form-data

    -->

    <form action="uploadController" method="post" enctype="multipart/form-data">
    文件:<input type="file" name="testfile" ><br>
    描述:<input type="text" name="description" ><br>
    <input type="submit" value="上传" />
    </form>
    </body>
    </html>

    UploadController.java

    package com.huawei.upload;

    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.List;

    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadException;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;

    /**
    * Servlet implementation class UploadController
    */
    public class UploadController extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
    * @see HttpServlet#HttpServlet()
    */
    public UploadController() {
    super();
    // TODO Auto-generated constructor stub
    }

    /**
    * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    this.doPost(request, response);
    }

    /**
    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    request.setCharacterEncoding("UTF-8");
    response.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=UTF-8");

    /*System.out.println(request.getParameter("description"));

    InputStream in = request.getInputStream();
    OutputStream out = new FileOutputStream(new File("F:/upload.txt"));

    byte []bytes = new byte[1024*8];
    int len = 0;

    while((len = in.read(bytes))!=-1){
    out.write(bytes, 0, len);
    }
    out.flush();
    out.close();
    in.close();*/


    //使用FileUpload文件上传插件的步骤
    //第一步 解析 测试 请求是否为 文件上传的请求

    boolean flag = ServletFileUpload.isMultipartContent(request);
    if(flag){
    //解析请求

    //基于文件系统创建文件选项的工厂
    DiskFileItemFactory factory = new DiskFileItemFactory();
    //得到 application 用户得到缓存的临时目录
    ServletContext context = this.getServletContext();
    //得到JVM自带的临时目录 不需要由我们自己去创建
    File repository = (File)context.getAttribute("javax.servlet.context.tempdir");
    //将仓库和工厂建立联系
    factory.setRepository(repository);
    //创建一个 ServletFileUpload 的实例
    ServletFileUpload upload = new ServletFileUpload(factory);

    try {
    //解析request 得到 表单域
    List<FileItem> items = upload.parseRequest(request);
    //遍历 表单域
    for(FileItem item:items){
    //判断是否为普通表单域 如果不是 则为文件
    if(item.isFormField()){
    //获取字段在form表单中的名字
    System.out.println(item.getFieldName());
    //获取名字 用于文件
    System.out.println(item.getName());
    //获取数据的大小
    System.out.println(item.getSize());
    //获取该表单域的值
    System.out.println(item.getString());
    //获取header 不常用
    System.out.println(item.getHeaders());
    //获取值的类型 用于文件
    System.out.println(item.getContentType());
    }else{
    //item.write(new File("F:/"+item.getName()));
    String path = context.getRealPath("/");
    System.out.println(path);
    item.write(new File(path+"/"+item.getName()));
    }
    }

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

    }

    }

    }

    web.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
    <display-name>TestUpload</display-name>
    <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
    <description></description>
    <display-name>UploadController</display-name>
    <servlet-name>UploadController</servlet-name>
    <servlet-class>com.huawei.upload.UploadController</servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>UploadController</servlet-name>
    <url-pattern>/uploadController</url-pattern>
    </servlet-mapping>
    </web-app>

  • 相关阅读:
    JAVA 使用 POI进行读取Excel表格示例
    问题解决:Maven execution terminated abnormally (exit code 1)
    oracle总结: INTERVAL DAY TO SECOND, 但却获得 NUMBER
    SpringMvc返回JSON出现"$.result.currentLevel"
    Spring+SpringMVC+mybatis maven pom文件
    redis在Linux上的安装
    Jsoup访问https网址异常SSLHandshakeException(已解决)
    不同版本2.5的Servlet web.xml 头信息
    Spring管理事物两种方式
    Error:too many padding sections on bottom border.
  • 原文地址:https://www.cnblogs.com/hwgok/p/5872086.html
Copyright © 2020-2023  润新知