文件上传详细

1.severlet代码

package com.oracle.action;

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

@WebServlet("/FileUpLoadServlet")
public class FileUpLoadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// DiskFileItemFactory需要使用该类
// setSizeThreshold设置临时文件的大小
// ServletFileUpload需要使用到他
// ==================这是得到我们的DiskFileItemFactory以及相关的设置============================
// 1.创建DiskFileItemFactory对象
DiskFileItemFactory factory = new DiskFileItemFactory();

// 2.得到物理路径
String path = request.getRealPath("\\upload");

// 3.设置临时文件存放的地址
factory.setRepository(new File(path));
// 3.设置临时文件的大小
factory.setSizeThreshold(1024 * 1024);
// ============DiskFileItemFactory操作已完成==========================

// 4.ServletFileUpload对象
// factory必须添加出来,不然就没有效果,同时也会出现异常
ServletFileUpload upload = new ServletFileUpload(factory);

// 5.处理中方乱码:我们在代码编写时》如果你的jsp中写的是大写那你后台也必须写大写
upload.setHeaderEncoding("UTF-8");

try {
// 6. 得到一个FileItem
List<FileItem> list = (List<FileItem>) upload.parseRequest(request);
// 操作我们的集合
for (FileItem item : list) {
// 我们需要判断是文件的还是传过来的表单
// 表示的是的表单字段:也就是我们的属性
if (item.isFormField()) {
// 字段名
String name = item.getFieldName();
System.out.println("字段名" + name);

// 得到值
String value = item.getString();
System.out.println("值:" + value);
// 我如何把这些值都取出来
// 使用request对象来操作
request.setAttribute(name, value);
} else {
// 就是文件的吧
// 取得名字和值
String name = item.getFieldName();
// 得到我们的他使用的是item.getName而不是getString
String value = item.getName();
System.out.println(name + value);
// 存放在request对象中
request.setAttribute(name, value);

// 在我们的Opera中会包含完整的路径:进行处理
int start = value.lastIndexOf("\\");

String fileName = value.substring(start + 1);

// 把文件写到我们的upload
// item.write(new File(path, fileName));
// 手动文件上传
uploadFile(path, item, fileName);
}
}
} catch (Exception e) {
e.printStackTrace();
}

// 跳转到成功页面中
request.getRequestDispatcher("result.jsp").forward(request, response);
}

/**
* 手动文件上传
*
* @param path
* 路径
* @param item
* @param fileName
* @throws Exception
*/
private void uploadFile(String path, FileItem item, String fileName) throws Exception {
// 1.得到outputStream输出流对象
OutputStream os = new FileOutputStream(new File(path, fileName));
// 2.得到输入流对象
InputStream is = item.getInputStream();
// 得到字节流
byte[] buffer = new byte[500];
int length = 0;
while ((length = is.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
is.close();
os.close();
}

}

2.文件上传页面

<%@ 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>Insert title here</title>
</head>
<body>
<form action="FileUpLoadServlet" method="post" enctype="multipart/form-data">
用户名:<input name="username" type="text"><br>
文件上传<input type="file" name="file"><br>
<input type="submit" value="文件提交">
</form>
</body>
</html>

或者

<%@ 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>
<!-- enctype="multipart/form-data" w3cshool查找出来 -->
<form action="resultfile.jsp" method="post" enctype="multipart/form-data">
用户名:<input name="username" type="text"><br>
文件上传<input type="file" name="file"><br>
<input type="submit" value="文件提交">
</form>
</body>
</html>

3.结果显示页面

<%@ 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>Insert title here</title>
</head>
<body>
<%=request.getAttribute("username") %>
<%=request.getAttribute("file") %>
</body>
</html>

或者

<%@page import="java.io.InputStreamReader"%>
<%@page import="java.io.BufferedReader"%>
<%@page import="java.io.InputStream"%>
<%@page import="jdk.internal.org.xml.sax.InputSource"%>
<%@ 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>Insert title here</title>
</head>
<body>
<!-- 取出用户名和文件名 -->
用户名:<%=request.getParameter("username") %>
文件名:<%=request.getParameter("file") %>

<%
//得到输入流
InputStream is = request.getInputStream();
BufferedReader br =new BufferedReader(new InputStreamReader(is));
//开始读流
String buffer=null;

while(null!=(buffer=br.readLine())){
//输出信息
out.print(buffer+"<br>");
}

//
br.close();
//关闭流
is.close();
%>

</body>
</html>

4.需要的包

 

 

commons-fileupload-1.3.2.jar

commons-io-2.5.jar

posted @ 2016-12-21 11:08  山沟沟的程序员  阅读(72)  评论(0)    收藏  举报