关闭

文件上传

108人阅读 评论(0) 收藏 举报
分类:

文件上传


步骤:

    step1,给表单设置enctype="multipart/form-data".(http协议的要求)并且表单只能使用post方式提交。

    step2,在服务器端,不能使用request.getParameter方法。

    此时,需要调用request.getInputStream获得一个InputStream,然后,分析这个流获得数据。一般使用一些工具来分析这个流(比如,apache提供的file-upload.jar)。


一、用到的jar包

二、jsp文件代码

<%@ page language="java" pageEncoding="utf-8" 
contentType="text/html; charset=utf-8"%>
<html>
	<head></head>
	<body>
		<form action="fileupload" method="post" enctype="multipart/form-data">
			<fieldset>
				<legend>上传文件</legend>
				用户名:<input name="username"><br/>
				照片:<input type="file" name="file1"/><br/>
				<input type="submit" value="提交">
			</fieldset>
		</form>
	</body>
</html>

三、servlet代码

package web;

import java.io.File;
import java.io.IOException;
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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadServlet extends HttpServlet {
	public void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//step1,创建一个DiskFileItemFactory对象,该对象为解析
		//器提供解析时的缺省的配置
		DiskFileItemFactory dfif = new DiskFileItemFactory();
		//step2,创建解析器
		ServletFileUpload sfu = new ServletFileUpload(dfif);
		//step3,使用解析器来解析
		//解析器会调用request.getInputStream获的一个流,然后
		//分析这个流,并且将分析的结果封装到FileItem对象里面。
		//一个FileItem对象封装了一个表单域中的所有数据。
		try {
			List<FileItem> items = sfu.parseRequest(request);
			System.out.println(items.size());
			//只需要遍历items集合就可以访问表单中的每一个
			//表单域的数据。
			for(int i=0;i<items.size();i++){
				FileItem curr = items.get(i);
				if(curr.isFormField()){
					//普通表单域
					String fieldname = curr.getFieldName();
					System.out.println("fieldname:"+fieldname);
					String  username = curr.getString();
					System.out.println("username:"+username);
				}else{
					//上传文件域
					//把用户上传的文件保存到upload文件夹
					ServletContext sctx = getServletContext();
					//String getRealPath(String path) -- path相对该应用的路径
					//依据逻辑路径获得实际部署的物理路径
					String path = sctx.getRealPath("upload");
					System.out.println("path:"+path);
					//下面两行为测试代码
					//String path1 = sctx.getRealPath("a");
					//System.out.println("path1:"+path1);
					
					//获得文件名
					String filename = curr.getName();
					File file = new File(path+File.separator+filename);
					curr.write(file);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

具体细节及解析见代码



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:161998次
    • 积分:5008
    • 等级:
    • 排名:第5620名
    • 原创:351篇
    • 转载:36篇
    • 译文:0篇
    • 评论:15条
    文章分类