龙腾四海365的专栏

日常学习总结、错误记录

文件上传

文件上传


步骤:

    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();
		}
	}

}

具体细节及解析见代码



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011637069/article/details/49906051
个人分类: servlet&jsp
想对作者说点什么? 我来说一句

文件上传图片文件上传

2010年09月02日 4KB 下载

文件上传文件上传

2011年09月18日 820KB 下载

struts文件上传

2010年04月16日 923KB 下载

php+flash图片上传

2010年06月03日 33KB 下载

struts2文件上传

2010年09月25日 36KB 下载

[SHOPEX]文件上传插件

2011年05月06日 138KB 下载

applet文件上传

2010年05月04日 10.3MB 下载

struts文件上传.pdf

2009年05月15日 184KB 下载

AJAX文件上传代码

2010年03月26日 92KB 下载

文件上传Struts2

2009年04月07日 38KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭