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

JAVA文件上传

2015-12-02 15:30 561 查看
今天复习下文件上传功能

所需组件:

commons-fileupload-1.2.1.jar

commons-io-1.4.jar

上传页面 sc.jsp

<span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传</title>
</head>
<body>

<form action="${ pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data">
文件描述:<input type="text" name="desc"/><br/>
文件上传:<input type="file" name="upload"><br/>
<input type="submit" value="上传">
</form>

</body>
</html></span>


上传servlet

<span style="font-size:18px;">package com.anditech.fileupload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Properties;
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.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/upload")
public class Upload extends HttpServlet {
private static final long serialVersionUID = 1L;

public Upload() {
super();
}

/**
* 1.创建一个磁盘文件项工厂.
* 2.创建一个核心解析类ServletFileUpload.
* 3.解析request对象.返回一个List<FileItem>
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.创建一个磁盘文件项工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(3*1024*1024);// 设置缓冲区是3M。
String tempPath = getServletContext().getRealPath("/temp");
File file = new File(tempPath);
factory.setRepository(file);

//获取分隔符
Properties props = System.getProperties();
String separator = props.getProperty("file.separator");

//获取文件上传路径
String basePath=this.getServletConfig().getServletContext().getRealPath("/");
String dateStr = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
String uploadPath = "uploadfile" +separator+"" + dateStr + ""+separator;
String fullPath = basePath+uploadPath;

System.out.println("filePath : "+fullPath);

// 2.创建一个核心解析类.
ServletFileUpload fileUpload = new ServletFileUpload(factory);

// 解决中文文件名乱码问题:
fileUpload.setHeaderEncoding("UTF-8");

// 3.解析request对象
try {
List<FileItem>  list = fileUpload.parseRequest(request);
System.out.println();
// 遍历
for (FileItem fileItem : list) {
if(fileItem.isFormField()){
// 页面中的普通项
// 获得的是普通项的名称
String name = fileItem.getFieldName();
// 获得普通项的值
String value = fileItem.getString("UTF-8");
System.out.println(name+"   "+value);
}else{
// 文件上传项
// 获得文件的名称
String fileName = fileItem.getName();

int idx = fileName.lastIndexOf("\\");
if(idx != -1){
// 说明老版本浏览器.
fileName = fileName.substring(idx+1);
}
System.out.println(fileName);
// 获得文件的数据
InputStream is = fileItem.getInputStream();
// 向服务器端写文件.
// 获得上传文件的路径.---获得文件上传的磁盘绝对路径
File f=new File(fullPath);
f.mkdirs();
File file2 = new File(fullPath, fileName);
if(!file.exists()){
file.mkdirs();//如果file不存在自动创建
}
OutputStream os = new FileOutputStream(file2);
// 两个流对接:
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
os.close();
}
// 删除临时文件.
fileItem.delete();
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

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