欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA使用commos-fileupload實現(xiàn)文件上傳與下載實例解析

 更新時間:2016年02月01日 16:49:07   作者:森林森  
這篇文章主要介紹了JAVA使用commos-fileupload實現(xiàn)文件上傳與下載的相關(guān)資料,需要的朋友可以參考下

首先給大家介紹一文件的上傳

實體類

import java.sql.Timestamp; 
/** 
* 
* @Decription 文件上傳實體類 
* 
*/ 
public class Upfile { 
private String id;// ID主鍵 使用uuid隨機生成 
private String uuidname; // UUID名稱 
private String filename;//文件名稱 
private String savepath; // 保存路徑 
private Timestamp uploadtime; // 上傳時間 
private String description;// 文件描述 
private String username; // 用戶名 
public Upfile() { 
super(); 
} 
public Upfile(String id, String uuidname, String filename, String savepath, 
Timestamp uploadtime, String description, String username) { 
super(); 
this.id = id; 
this.uuidname = uuidname; 
this.filename = filename; 
this.savepath = savepath; 
this.uploadtime = uploadtime; 
this.description = description; 
this.username = username; 
} 
public String getDescription() { 
return description; 
} 
public String getFilename() { 
return filename; 
} 
public String getId() { 
return id; 
} 
public String getSavepath() { 
return savepath; 
} 
public Timestamp getUploadtime() { 
return uploadtime; 
} 
public String getUsername() { 
return username; 
} 
public String getUuidname() { 
return uuidname; 
} 
public void setDescription(String description) { 
this.description = description; 
} 
public void setFilename(String filename) { 
this.filename = filename; 
} 
public void setId(String id) { 
this.id = id; 
} 
public void setSavepath(String savepath) { 
this.savepath = savepath; 
} 
public void setUploadtime(Timestamp uploadtime) { 
this.uploadtime = uploadtime; 
} 
public void setUsername(String username) { 
this.username = username; 
} 
public void setUuidname(String uuidname) { 
this.uuidname = uuidname; 
} 
} 

頁面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 
<% 
String path = request.getContextPath(); 
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 
%> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<base href="<%=basePath%>"> 
<title>My JSP 'upload.jsp' starting page</title> 
<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="cache-control" content="no-cache"> 
<meta http-equiv="expires" content="0"> 
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 
<meta http-equiv="description" content="This is my page"> 
<!-- 
<link rel="stylesheet" type="text/css" href="styles.css"> 
--> 
</head> 
<body> 
<h1>文件上傳</h1> 
<form action="${pageContext.request.contextPath }/upload" method="post" enctype="multipart/form-data"> 
<table> 
<tr> 
<td> 上傳用戶名:</td> 
<td><input type="text" name="username"/></td> 
</tr> 
<tr> 
<td> 上傳文件:</td> 
<td><input type="file" name="file"/></td> 
</tr> 
<tr> 
<td> 描述:</td> 
<td><textarea rows="5" cols="50" name="description"></textarea></td> 
</tr> 
<tr> 
<td><input type="submit" value="上傳開始"/></td> 
</tr> 
</table> 
</form> 
<div>${msg }</div> 
<a href="${pageContext.request.contextPath }/index.jsp">返回主頁</a> 
</body> 
</html> 

Servlet

import java.io.IOException; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; 
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import com.itheima.domain.Upfile; 
import com.itheima.exception.MyException; 
import com.itheima.service.UpfileService; 
import com.itheima.service.impl.UpfileServiceImpl; 
import com.itheima.untils.WebUntil; 
public class UploadFileServlet extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
doPost(request, response); 
} 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
//判斷表單是不是多個部分組成的 
if(!ServletFileUpload.isMultipartContent(request)){ 
request.setAttribute("msg", "表單個設(shè)置錯誤,請檢查enctype屬性是是否設(shè)置正確"); 
request.getRequestDispatcher("/upload.jsp").forward(request, response); 
return ; 
} 
//是多部分組成的就獲取并遍歷返回一個文件上傳對象,包含上傳的所有信息 
try { 
Upfile upfile=WebUntil.upload(request); 
UpfileService upfileService=new UpfileServiceImpl(); 
boolean flag=upfileService.add(upfile); 
if(flag){ 
request.setAttribute("msg", "上傳成功"); 
request.getRequestDispatcher("/upload.jsp").forward(request, response); 
return ; 
}else{ 
request.setAttribute("msg", "上傳失敗,請重試"); 
request.getRequestDispatcher("/upload.jsp").forward(request, response); 
return ; 
} 
}catch (FileSizeLimitExceededException e) { 
e.printStackTrace(); 
request.setAttribute("msg", "單個文件大小 ,超過最大限制"); 
request.getRequestDispatcher("/upload.jsp").forward(request, response); 
return ; 
} catch (SizeLimitExceededException e) { 
e.printStackTrace(); 
request.setAttribute("msg", "總文件大小 ,超過最大限制"); 
request.getRequestDispatcher("/upload.jsp").forward(request, response); 
return ; 
} 
} 
}

工具類

import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.UnsupportedEncodingException; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.UUID; 
import javax.servlet.http.HttpServletRequest; 
import org.apache.commons.fileupload.FileItem; 
import org.apache.commons.fileupload.FileUploadBase; 
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException; 
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException; 
import org.apache.commons.fileupload.FileUploadException; 
import org.apache.commons.fileupload.ProgressListener; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 
import com.itheima.domain.Upfile; 
import com.itheima.exception.MyException; 
/** 
* 文件上傳工具類 
* @Decription TODO 
* 
*/ 
public class WebUntil { 
/** 
* 文件上傳的方法 
* @param request 請求參數(shù)傳入 
* @return 返回一個Upfile對象 
* @throws FileSizeLimitExceededException 
* @throws SizeLimitExceededException 
* @throws IOException 
*/ 
public static Upfile upload(HttpServletRequest request) throws FileSizeLimitExceededException, SizeLimitExceededException { 
Upfile upfile=new Upfile(); 
ArrayList<String> fileList=initList(); 
try { 
//獲取磁盤文件對象工廠 
DiskFileItemFactory factory=new DiskFileItemFactory(); 
String tmp=request.getSession().getServletContext().getRealPath("/tmp"); 
System.out.println(tmp); 
//初始化工廠 
setFactory(factory,tmp); 
//獲取文件上傳解析器 
ServletFileUpload upload=new ServletFileUpload(factory); 
//初始化解析器 
setUpload(upload); 
//獲取文件列表集合 
List<FileItem> list = upload.parseRequest(request); 
//遍歷 
for (FileItem items : list) { 
//判斷 是不是普通表單個對象 
if(items.isFormField()){ 
//獲取上傳表單的name 
String fieldName=items.getFieldName(); 
//value 
String fieldValue=items.getString("UTF-8"); 
//判斷 
if("username".equals(fieldName)){ 
//設(shè)置 
upfile.setUsername(fieldValue); 
}else if("description".equals(fieldName)){ 
//設(shè)置屬性 
upfile.setDescription(fieldValue); 
} 
}else{ 
//是文件就準(zhǔn)備上傳 
//獲取文件名 
String filename=items.getName(); 
//處理因為瀏覽器不同而導(dǎo)致的 獲得 的 文件名的 差異 
int index=filename.lastIndexOf("\\"); 
if(index!=-1){ 
filename=filename.substring(index+1); 
} 
//生成隨機的文件名 
String uuidname=generateFilename(filename); 
//獲取上傳的文件路徑 
String savepath=request.getSession().getServletContext().getRealPath("/WEB-INF/upload"); 
//獲取請求對象中的輸入流 
InputStream in = items.getInputStream(); 
//將文件打散存放在不同的路徑,求出路徑 
savepath=generateRandomDir(savepath,uuidname); 
//復(fù)制文件 
uploadFile(in,savepath,uuidname); 
String id=UUID.randomUUID().toString(); 
upfile.setId(id); 
upfile.setSavepath(savepath); 
upfile.setUuidname(uuidname); 
upfile.setFilename(filename); 
//清除緩存 
items.delete(); 
} 
} 
}catch ( FileUploadBase.FileSizeLimitExceededException e) { 
//拋出出異常 
throw e; 
} catch (FileUploadBase.SizeLimitExceededException e) { 
//拋出出異常 
throw e; 
}catch (FileUploadException e) { 
e.printStackTrace(); 
} catch (UnsupportedEncodingException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
} catch (Exception e) { 
e.printStackTrace(); 
} 
return upfile; 
} 
/** 
* 初始化文件列表 
* @return 
*/ 
private static ArrayList<String> initList() { 
ArrayList<String> list=new ArrayList<String>(); 
list.add(".jpg"); 
list.add(".rar"); 
list.add(".txt"); 
list.add(".png"); 
return list; 
} 
/** 
* 復(fù)制文件 
* @param in items中的輸入流 
* @param savepath 保存路徑 
* @param uuidname 文件名 
*/ 
private static void uploadFile(InputStream in, String savepath, 
String uuidname) { 
//獲取文件 
File file=new File(savepath, uuidname); 
OutputStream out = null; 
try { 
int len=0; 
byte [] buf=new byte[1024]; 
//獲取輸出流 
out = new FileOutputStream(file); 
while((len=in.read(buf))!=-1){ 
out.write(buf, 0, len); 
} 
} catch (FileNotFoundException e) { 
e.printStackTrace(); 
} catch (IOException e) { 
e.printStackTrace(); 
}finally{ 
try { 
in.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
try { 
out.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
} 
} 
} 
/** 
* 生成隨機的存放路徑 
* @param savepath 保存路徑 
* @param uuidname 生成的uuid名稱 
* @return 
* 使用hashcode完成 
*/ 
private static String generateRandomDir(String savepath, String uuidname) { 
//轉(zhuǎn)化為hashcode 
System.out.println("上傳路徑"+savepath); 
System.out.println("UUIDNAME"+uuidname); 
int hashcode=uuidname.hashCode(); 
//容器 
StringBuilder sb=new StringBuilder(); 
while(hashcode>0){ 
//與上15 
int tmp=hashcode&0xf; 
sb.append("/"); 
sb.append(tmp+""); 
hashcode=hashcode>>4; 
} 
//拼接新的路徑 
String path=savepath+sb.toString(); 
System.out.println("path"+path); 
File file=new File(path); 
//判斷路徑存不存在 
if(!file.exists()){ 
//不存在就創(chuàng)建 
file.mkdirs(); 
} 
//返回保存路徑 
return path; 
} 
/** 
* 生成新的文件名 
* @param uuidname 隨機的ID名字 
* @param filename 原來的名 
* @return 
*/ 
private static String generateFilename( String filename) { 
String uuidname=UUID.randomUUID().toString(); 
return uuidname.replace("-", "").toString()+"_"+filename; 
} 
/** 
* 初始化解析器 
* @param upload 
*/ 
private static void setUpload(ServletFileUpload upload) { 
// 設(shè)置 字符編碼 
upload.setHeaderEncoding("utf-8"); 
//設(shè)置文件大小 
upload.setFileSizeMax(1024*1024*20); 
//設(shè)置總文件大小 
upload.setSizeMax(1024*1024*50); 
//設(shè)置進度監(jiān)聽器 
upload.setProgressListener(new ProgressListener() { 
public void update(long pBytesRead, long pContentLength, int pItems) { 
System.out.println("已經(jīng)讀取: "+pBytesRead+",總共有: "+pContentLength+", 第"+pItems+"個"); 
} 
}); 
} 
/** 
* 工廠初始化方法 
* @param factory 
* @param tmp 緩沖目錄 
*/ 
private static void setFactory(DiskFileItemFactory factory, String tmp) { 
/// 配置初始化值緩沖區(qū) 
factory.setSizeThreshold(1024*1024); 
File file=new File(tmp); 
//設(shè)置緩沖目錄 
factory.setRepository(file); 
} 
}

二文件下載

Servlet

public class DownupfileServlet extends HttpServlet { 
public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
doPost(request, response); 
} 
public void doPost(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException { 
//獲取ID 
String id=request.getParameter("id"); 
//業(yè)務(wù)層的接口 
UpfileService upfileService=new UpfileServiceImpl(); 
//根據(jù)ID查找這個對象 
Upfile upfile=upfileService.findUpfileById(id); 
if(upfile==null){ 
return; 
} 
//獲取文件的真實名稱 
String filename=upfile.getFilename(); 
//如果文件名中有中文,需要轉(zhuǎn)碼,不然就下載時沒有文件名 
filename=URLEncoder.encode(filename, "utf-8"); 
//更改過的名稱 
String uuidname=upfile.getUuidname(); 
//保存路徑 
String savepath=upfile.getSavepath(); 
File file=new File(savepath,uuidname); 
//判斷文件 是否存在 
if(!file.exists()){ 
request.setAttribute("msg", "下載 的文件過期了"); 
request.getRequestDispatcher("/index").forward(request, response); 
return; 
} 
//設(shè)置文件下載響應(yīng)頭信息 
response.setHeader("Content-disposition", "attachement;filename="+filename); 
//使用IO流輸出 
InputStream in = new FileInputStream(file); 
ServletOutputStream out = response.getOutputStream(); 
int len=0; 
byte [] buf=new byte[1024]; 
while((len=in.read(buf))!=-1){ 
out.write(buf, 0, len); 
} 
in.close(); 
} 
}

數(shù)據(jù)庫

create database upload_download_exercise; 
use upload_download_exercise; 
create table upfiles( 
id varchar(100), //使用UUID生成 
uuidname varchar(255),//uuid加上原來的文件名 
filename varchar(100),//真實文件名 
savepath varchar(255),//保存路徑 
uploadtime timestamp,//上傳時間 
description varchar(255),//描述 
username varchar(10) 上傳人 
); 

以上所述是小編給大家分享的JAVA使用commos-fileupload實現(xiàn)文件上傳與下載的相關(guān)內(nèi)容,希望對大家有所幫助。

相關(guān)文章

  • Java設(shè)計模式之命令模式(Command模式)介紹

    Java設(shè)計模式之命令模式(Command模式)介紹

    這篇文章主要介紹了Java設(shè)計模式之命令模式(Command模式)介紹,本文講解了Command模式的定義、如何使用命令模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Springboot設(shè)置文件上傳大小限制的實現(xiàn)示例

    Springboot設(shè)置文件上傳大小限制的實現(xiàn)示例

    Spring Boot工程嵌入的tomcat限制了請求的文件大小默認為1MB,單次請求的文件的總數(shù)不能大于10Mb,本文主要介紹了Springboot設(shè)置文件上傳大小限制的實現(xiàn)示例,感興趣的可以了解一下
    2023-11-11
  • idea 修改項目名和module名稱的操作

    idea 修改項目名和module名稱的操作

    這篇文章主要介紹了idea 修改項目名和module名稱的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    Java SSM整合開發(fā)統(tǒng)一結(jié)果封裝詳解

    這篇文章主要介紹了Java SSM整合開發(fā)實現(xiàn)統(tǒng)一結(jié)果封裝,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • maven?springboot如何將jar包打包到指定目錄

    maven?springboot如何將jar包打包到指定目錄

    這篇文章主要介紹了maven?springboot如何將jar包打包到指定目錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring Boot整合郵件發(fā)送與注意事項

    Spring Boot整合郵件發(fā)送與注意事項

    這篇文章主要給大家介紹了關(guān)于Spring Boot整合郵件發(fā)送與注意事項的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • Kotlin + Retrofit + RxJava簡單封裝使用詳解

    Kotlin + Retrofit + RxJava簡單封裝使用詳解

    這篇文章主要介紹了Kotlin + Retrofit + RxJava簡單封裝使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Spring使用注解存儲Bean對象的方法詳解

    Spring使用注解存儲Bean對象的方法詳解

    在使用學(xué)習(xí)使用 Spring過程中,當(dāng)我們要實現(xiàn)一個功能的時候,先應(yīng)該考慮的是有沒有相應(yīng)的注解是實現(xiàn)對應(yīng)功能的,Spring 中很多功能的配置都是可以依靠注解實現(xiàn)的,而本篇中介紹的是使用注解來存儲 Bean 對象
    2023-07-07
  • Java的NIO與IO的詳解及對比

    Java的NIO與IO的詳解及對比

    這篇文章主要介紹了Java的NIO與IO的詳解及對比的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java如何判斷一個url是否有效

    Java如何判斷一個url是否有效

    URL類提供了一個openConnection()方法,可以打開一個連接并返回一個URLConnection對象,該對象可以用來檢查連接是否有效,這篇文章主要介紹了Java判斷一個url是否有效,需要的朋友可以參考下
    2023-09-09

最新評論