您的位置:首页 > 编程语言 > Java开发

javaWeb 文件上传功能

2016-05-26 16:37 525 查看
首先要下载两个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>



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息