javaWeb 文件上传功能

首先要下载两个jar包,点击我的网盘地址即可下载
http://pan.baidu.com/s/1o7C5iP0
</pre><pre name="code" class="java">比较重点的几个类:FileItem,<span style="font-family: Arial, Helvetica, sans-serif;">servletFileUpload,</span><pre name="code" class="java">FileItemFactory
 
下面是具体代码
不但可以传文本,还可以传各种其他的文件
<pre name="code" class="java">package com.xyp.servlet;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.List;

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

import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class UploadServlet
 */
@WebServlet(value="/UploadServlet")
public class UploadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public UploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");//设置编码
		response.getWriter().println("请以post方式上传文件");//输出信息
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	@SuppressWarnings("unchecked") //消除unchecked warning
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("UTF-8");//设置response编码
		response.setContentType("text/html");//设置response输出类型
		File file1 = null,file2 = null;
		String description1 = null,description2 = null;
		PrintWriter out = response.getWriter();
		FileItemFactory factory = new DiskFileItemFactory();
<span style="white-space:pre">		</span>//建立FileItem工厂,可以设置缓存在内存或者缓存在硬盘
		ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
<span style="white-space:pre">		</span>//设置servletFileUpload使用刚才建立的FileItem工厂
		try {
			List<FileItem> list=servletFileUpload.parseRequest(request);//将结果放置在List中,<span style="font-family: Arial, Helvetica, sans-serif;">解析request</span>
			out.println("遍历所有的FileItem...<br/>");
			for(FileItem fileItem:list){	//遍历所有的FileItem
<span style="white-space:pre">				</span>//打出所有上传的标签的name属性值
				System.out.println(fileItem.getFieldName());
				//获取所有fileitem是文件的文件名
				String str = new String(fileItem.getName());
				if(fileItem.isFormField()){	//如果是文本域
					if("description1".equals(fileItem.getFieldName())){//如果是该参数
						out.println("遍历到 description1...<br/>");
						description1 = new String(fileItem.getString().getBytes(),"UTF-8");
					}
					if("description2".equals(fileItem.getFieldName())){//如果是该参数
						out.println("遍历到 description2...<br/>");
						description2 = new String(fileItem.getString().getBytes(),"UTF-8");
					}
				}else{	//否则为文件域
					if("file1".equals(fileItem.getFieldName())&&!"".equals(str)){<span style="font-family: Arial, Helvetica, sans-serif;">//如果name=file1,并且文件名不为空字符串</span>
					File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8"));
					out.println("遍历到file1...<br/>");
					out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>");
					//服务端文件,放在upload文件夹下
					file1 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());<span style="font-family: Arial, Helvetica, sans-serif;">//创建file实例</span>
					file1.getParentFile().mkdirs();//创建文件夹路径
					file1.createNewFile();//创建新文件
					InputStream ins = fileItem.getInputStream();//FileItem的内容
					OutputStream ous = new FileOutputStream(file1);//输出到文件中
								try {
									byte[] buffer = new byte[1024];//字节缓存
									int len = 0;//实际缓存长度
									while((len=ins.read(buffer))>-1){//循环读入缓存
										ous.write(buffer,0,len);
										//ous.write(buffer);
										out.println("已保存文件"+file1.getAbsolutePath()+"<br/>");
									}
								}finally{
									ous.close();
									ins.close();
								}
							}
					if("file2".equals(fileItem.getFieldName())&&!"".equals(str)){//如果name=file2,并且文件名不为空字符串
						File remoteFile= new File(new String(fileItem.getName().getBytes(),"UTF-8"));
						out.println("遍历到file2...<br/>");
						out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"<br/>");
						//服务端文件,放在upload文件夹下
						file2 = new File(this.getServletContext().getRealPath("attachment"),remoteFile.getName());//创建file实例
						file2.getParentFile().mkdirs();//创建文件夹路径
						file2.createNewFile();//创建新文件
						InputStream ins = fileItem.getInputStream();//FileItem的内容
						OutputStream ous = new FileOutputStream(file2);//输出到文件中
								try {
									byte[] buffer = new byte[1024];//字节缓存
									int len = 0;//实际缓存长度
									while((len=ins.read(buffer))>-1){//循环读入缓存
										ous.write(buffer,0,len);
										out.println("已保存文件"+file1.getAbsolutePath()+"<br/>");
									}
								}finally{
									ous.close();
									ins.close();
								}
						}
				
					}
		} 
			out.println("Request解析完毕");
		}catch (Exception e) {
			e.printStackTrace();
		}
		if(file1 !=null){//输出file1链接
			out.println("<div class='line'>");
			out.println("<div align='left' class='leftDiv'>file1:</div>");
			out.println("<div align='left' class='rightDiv'>");
			out.println("<a href='"+request.getContextPath()+"/attachm	ent/"+file1.getName()+"'target=_blank>"+file1.getName()+"</a>");
			out.println("</div>");
			out.println("</div>");
		}
		if(file2 !=null){//输出file2链接
			out.println("<div class='line'>");
			out.println("<div align='left' class='leftDiv'>file2:</div>");
			out.println("<div align='left' class='rightDiv'>");
			out.println("<a href='"+request.getContextPath()+"/attachment/"+file2.getName()+"'target=_blank>"+file2.getName()+"</a>");
			out.println("</div>");
			out.println("</div>");
		}
		out.println("<div class='line'>");
		out.println("<div align='left' class='leftDiv'>description1:</div>");
		out.println("<div align='left' class='rightDiv'>");
		out.println(description1);
		out.println("<div class='line'>");
		out.println("<div align='left' class='leftDiv'>description2:</div>");
		out.println("<div align='left' class='rightDiv'>");
		out.println(description2);
		out.println("</div>");
		out.println("</div>");
	}

}

前端代码:
 
<pre name="code" class="html"><!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/servlet-back/UploadServlet" method="post" enctype="multipart/form-data">
		<div align="center"><br/>
			<fieldset style="width:80%">
				<legend>上传文件</legend>
				<div class="line">
					<div align="left" class="lefeDiv">上传文件一</div>
					<div align="left" class="rightDiv">
						<input type="file" name="file1" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上传文件二</div>
					<div align="left" class="rightDiv">
						<input type="file" name="file2" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上传文件说明一</div>
					<div align="left" class="rightDiv">
						<input type="text" name="description1" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv">上传文件说明二</div>
					<div align="left" class="rightDiv">
						<input type="text" name="description2" class="text">
					</div>
				</div>
				<div class="line">
					<div align="left" class="lefeDiv"></div>
					<div align="left" class="rightDiv"><br/>
						<input type="submit" value="上传文件" class="button">
					</div>
				</div>
			</fieldset>
		</div>
	</form>
</body>
</html>


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值