JAVAEE-文件上傳
需要引入的jar文件:commons-fileupload-1.3.2,commons-io-2.5.jar。
下載地址
http://commons.apache.org/proper/commons-fileupload/
http://commons.apache.org/proper/commons-io/
- 通過Servlet實現
package com.upload.servlet;
import java.io.File;
import java.io.IOException;
import java.util.List;
...導入需要的包
public class UploadServlet extends HttpServlet {
private TouXiangService service=new TouXiangServiceImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
TouXiang tx = new TouXiang();
try {
// 文件上傳
// 可以判斷當前請求是不是二進制,如果不是可以終止代碼
if (!ServletFileUpload.isMultipartContent(request)) {
return;
}
// 獲得FileItemFactory類
// 能夠創建文件輸入流的工廠對象
FileItemFactory factory = new DiskFileItemFactory();
// 獲得ServletFileUpload對象
ServletFileUpload upload = new ServletFileUpload(factory);
// 設置最大上傳大小
upload.setSizeMax(3 * 1024 * 1024);
// 設置上傳字符集(好像不好用)
// upload.setHeaderEncoding("utf-8");
// 通過upload對象中的parseRequest方法獲得FileItem類型的集合
List<FileItem> list = upload.parseRequest(request);
// 遍歷所有表單元素
for (FileItem fi : list) {
// 迭代到當前表單元素如果是普通元素
if (fi.isFormField()) {
if (fi.getFieldName().equals("username"))
tx.setUsername(fi.getString("utf-8"));
if (fi.getFieldName().equals("gender"))
tx.setGender(fi.getString("utf-8"));
} else {
// 如果是文件域
// 獲得用戶上傳的文件名
// String filename = fi.getName();
// 使用時間偏移量和隨機數來生成文件名,減少重複機率
String sui = (int) (Math.random() * 10000000) + "";
String shi = System.currentTimeMillis() + "";
//時間+隨機數+上傳文件名的後綴名
String filename = shi
+ sui
+ fi.getName().substring(
fi.getName().lastIndexOf("."));
// System.out.println(filename);
// 獲得項目在服務器計算機中的真實路徑
String path = this.getServletContext()
.getRealPath("upload");
fi.write(new File(path + "/" + filename));
//設置tx對象中的imgname屬性爲filename
tx.setImgname(filename);
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//寫入數據庫
int num=service.addTouXing(tx);
//重定向到顯示頁面
response.sendRedirect("ShowServlet");
}
}
- 通過springmvc 實現
package com.mvc.controller;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
@RequestMapping("uploads.do")
public class UploadsController {
@RequestMapping
public String upload(HttpServletRequest request) throws IOException {
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
//獲取表單裏myfile的數據
List<MultipartFile> list = req.getFiles("myfile");
// 獲得真是路徑
String path = request.getSession().getServletContext()
.getRealPath("upload");
for (MultipartFile mf : list) {
if (mf.isEmpty())
continue;
// 獲得輸入流
InputStream inputStream = mf.getInputStream();
// 獲得定義文件名,獲得後綴名
String fname = System.currentTimeMillis()
+ ""
+ (int) (Math.random() * 1000000)
+ mf.getOriginalFilename().substring(
mf.getOriginalFilename().lastIndexOf("."));
// 獲得輸出流
OutputStream outputStream = new FileOutputStream(path + "\\"
+ fname);
int len = 0;
// 緩衝
byte[] b = new byte[1024];
// 循環讀寫
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
inputStream.close();
outputStream.close();
}
return "redirect:main.jsp";
}
}
上傳多個
@Controller
@RequestMapping("uploads.do")
public class UploadsController {
@RequestMapping
public String upload(HttpServletRequest request) throws IOException {
MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
//獲取表單裏myfile的數據
List<MultipartFile> list = req.getFiles("myfile");
// 獲得真是路徑
String path = request.getSession().getServletContext()
.getRealPath("upload");
for (MultipartFile mf : list) {
if (mf.isEmpty())
continue;
// 獲得輸入流
InputStream inputStream = mf.getInputStream();
// 獲得定義文件名,獲得後綴名
String fname = System.currentTimeMillis()
+ ""
+ (int) (Math.random() * 1000000)
+ mf.getOriginalFilename().substring(
mf.getOriginalFilename().lastIndexOf("."));
// 獲得輸出流
OutputStream outputStream = new FileOutputStream(path + "\\"
+ fname);
int len = 0;
// 緩衝
byte[] b = new byte[1024];
// 循環讀寫
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
inputStream.close();
outputStream.close();
}
return "redirect:main.jsp";
}
}