文件上传是开发一个网站最基本的一个需求功能
前台页面的设置:
<%@ 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