文件上传(表单文件上传)
Posted myfaith-feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件上传(表单文件上传)相关的知识,希望对你有一定的参考价值。
文件上传是开发一个网站最基本的一个需求功能
前台页面的设置:
<%@ 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); } }
缺陷:重命名问题、中文显示问题
以上是关于文件上传(表单文件上传)的主要内容,如果未能解决你的问题,请参考以下文章