Servlet(一)—— 文件上传(表单文件上传)

文件上传是开发一个网站最基本的一个需求功能

前台页面的设置:

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

<form action="upload.do?method=upload" method="post" enctype="multipart/form-data">
    美照:<input type="file" name="image"/><br>
    姓名:<input type="text" name="name"/><br>
    <input type="submit"/>
</form>

要点:

  1、提交的方式必须是post方式,因为get方式是通过url地址栏进行数据的传递的,所以不能选用get方法

  2、在form标签中需要添加 enctype="multipart/form-data"属性,如果不添加需要上传的信息内容不能传递到后台,只会传递该文件的文件名过去。使用了该属性则必须在后台使用工具将数据分离

后台设置:

  在src目录下创建一个com.servlet包,然后添加一个UploadServlet.java类,并将该类注册到web.xml中

  拷贝cos.jar-->https://github.com/DarknessShadow/DataMaven  包放于web项目的lib目录下(cos.jar主要功能是用来分离前台传递过去的数据,然后将分离出的文件在写入到指定的路径中)

package com.servlet;

import java.io.IOException;
import java.util.Map;

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

import com.oreilly.servlet.MultipartRequest;
import com.util.Upload;

public class UploadServlet extends HttpServlet{
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        
        String method = request.getParameter("method");
        System.out.println(method);
        if("upload".equals(method)){
            doUpload(request,response);
        }
    
    }

    private void doUpload(HttpServletRequest request, HttpServletResponse response) throws IOException {
//      按照原先的servlet的接收方式,是接收不到数据的,必须使用工具将数据分离
//      String image = request.getParameter("image");
//      System.out.println(image);
//      String name = request.getParameter("name");
//      System.out.println(name);
        
//      同过request对象获取存储图片的真实路径
        String path = request.getServletContext().getRealPath("/images");
        System.out.println(path);
//      获取存储数据的对象,并设置其对应的编码,路径
        MultipartRequest mr = new MultipartRequest(request, path,"utf-8");
//      获得前台发送过来的文件原始名称
        String image = mr.getOriginalFileName("image");
        System.out.println(image);
//      获取前台表单发送过来的普通数据
        String name = mr.getParameter("name");
        System.out.println(name);
        
    }
}
    

缺陷:重命名问题、中文显示问题

原文地址:https://www.cnblogs.com/myfaith-feng/p/9589576.html