1. 程式人生 > >檔案上傳和下載(三)--【SmartUpload】

檔案上傳和下載(三)--【SmartUpload】

一、簡介

SmartUpload一種java上傳元件包,可以輕鬆的實現檔案的上傳及下載功能。

使用該元件可以輕鬆的實現上傳檔案的限制,也可以輕易的取得檔案上傳的名稱、字尾、大小等。

三、具體實現例子【jsp+SmartUpload】

專案目錄


web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>SmartUploadServlet</servlet-name>
    <servlet-class>com.wuhn.smartupload.servlet.SmartUploadServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>SmartDownloadServlet</servlet-name>
    <servlet-class>com.wuhn.smartupload.servlet.SmartDownloadServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>BatchSmartDownloadServlet</servlet-name>
    <servlet-class>com.wuhn.smartupload.servlet.BatchSmartDownloadServlet</servlet-class>
  </servlet>

  <!-- 上傳servlet -->	
  <servlet-mapping>
    <servlet-name>SmartUploadServlet</servlet-name>
    <url-pattern>/SmartUploadServlet.do</url-pattern>
  </servlet-mapping>
  <!-- 下載servlet -->	
  <servlet-mapping>
    <servlet-name>SmartDownloadServlet</servlet-name>
    <url-pattern>/SmartDownloadServlet.do</url-pattern>
  </servlet-mapping>
  <!-- 批量下載servlet -->	
  <servlet-mapping>
    <servlet-name>BatchSmartDownloadServlet</servlet-name>
    <url-pattern>/BatchSmartDownloadServlet.do</url-pattern>
  </servlet-mapping>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>
後臺servlet

SmartUploadServlet.java

package com.wuhn.smartupload.servlet;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

/**
 * @author wuhn
 * @建立時間 2015-12-08
 * @功能 SmartUpload 上傳 
 * **/
public class SmartUploadServlet extends HttpServlet {

	/**
	 * The doGet method of the servlet. 
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);//預設post
		
	}

	/**
	 * The doPost method of the servlet. 
	 *
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//設定上傳檔案儲存路徑
		String filePath = getServletContext().getRealPath("/")+"images";
		File file = new File(filePath);
		if(!file.exists()){
			file.mkdir();
		}
		
		SmartUpload smartUpload = new SmartUpload();
		//初始化物件
		smartUpload.initialize(getServletConfig(), request, response);
		//設定上傳檔案
		smartUpload.setMaxFileSize(1024*1024*10);
		//設定所有檔案的大小
		smartUpload.setTotalMaxFileSize(1024*1024*100);
		//設定檔案的型別
		smartUpload.setAllowedFilesList("txt,jpg,gif");
		String result = "上傳成功!";
		//設定禁止上傳的檔案型別
		try {
			smartUpload.setDeniedFilesList("rar,jsp,js");
			//上傳檔案
			smartUpload.upload();
			//儲存檔案
			int count = smartUpload.save(filePath);		
		} catch (Exception e) {
			//捕捉Exception異常 ,不然捕捉到異常
			result = "上傳失敗!";
			if(e.getMessage().indexOf("1015") != -1){
				result = "上傳失敗:上傳檔案型別不正確!";
			}else if (e.getMessage().indexOf("1010") != -1) {
				result = "上傳失敗:上傳檔案型別不正確!";
			}else if (e.getMessage().indexOf("1105") != -1) {
				result = "上傳失敗:上傳檔案大小大於允許上傳的最大值!";
			}else if (e.getMessage().indexOf("1110") != -1) {
				result = "上傳失敗:上傳檔案總大小大於允許上傳總大小的最大值!";
			}
			e.printStackTrace();
		}
		
		//獲取上傳檔案的屬性
		for(int i=0;i<smartUpload.getFiles().getCount();i++){
			com.jspsmart.upload.File tempFile = smartUpload.getFiles().getFile(i);
			System.out.println("***************");
			System.out.println("表單中name的值:"+tempFile.getFileName());
			System.out.println("上傳檔名:"+tempFile.getFileName());
			System.out.println("上傳檔案大小:"+tempFile.getSize());
			System.out.println("上傳檔案的拓展名:"+tempFile.getFileExt());
			System.out.println("上傳檔案全名:"+tempFile.getFilePathName());
			System.out.println("***************");
		}
		
		System.out.println("上傳結果:"+result);
		request.setAttribute("result", result);
		request.getRequestDispatcher("/jsp/01.jsp").forward(request, response);
		
		
	}

}

SmartDownloadServlet.java
package com.wuhn.smartupload.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;

/**
 * @author wuhn
 * @建立時間 2015-12-08
 * @功能 SmartUpload 下載 
 * **/
public class SmartDownloadServlet extends HttpServlet {

	/**
	 * The doGet method of the servlet. <br>
	 *
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
		
	}

	/**
	 * The doPost method of the servlet. <br>
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String result = "下載成功";
		//獲取下載的檔名
		String filename = request.getParameter("filename");
		//下載
		SmartUpload smartUpload = new SmartUpload();
		smartUpload.initialize(getServletConfig(), request, response);
		smartUpload.setContentDisposition(null);//取消預設開啟方式
		try {
			smartUpload.downloadFile("/images/"+filename);
		} catch (Exception e) {
			result = "下載失敗";
			System.out.println("********異常處理********");
			if(e.getMessage().indexOf("系統找不到指定的路徑。") != -1){
				result = "下載失敗:檔案不存在!";
			}
			e.printStackTrace();
		}
		
		request.setAttribute("result", result);
		request.getRequestDispatcher("/jsp/02.jsp").forward(request, response);
		
		
	}

}

BatchSmartDownloadServlet.java
package com.wuhn.smartupload.servlet;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @author wuhn
 * @建立時間 2015-12-09
 * @功能 SmartUpload 批量下載
 * **/
public class BatchSmartDownloadServlet extends HttpServlet {

	/**
	 * The doGet method of the servlet. 
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
		
	}

	/**
	 * The doPost method of the servlet. 
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//設定下載相應資訊
		response.setContentType("application/x-msdownload");
		response.setHeader("Content-Disposition", "attachment;filename=test.zip");
		
		//下載路徑
		String path = getServletContext().getRealPath("/")+"images/";
		//獲取下載的所有檔名
		String[] filenames = request.getParameterValues("filename");
		String str = "";
		String rt = "\r\n";
		//設定壓縮資訊
		ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
		//獲取需要下載的檔案
		for(String filename:filenames){
			str += filename + rt;
			File file = new File(path + filename);
			zipOutputStream.putNextEntry(new ZipEntry(filename));//加入壓縮檔案
			FileInputStream fileInputStream = new FileInputStream(file);
			byte b[] = new byte[1024];
			int n=0;
			while ((n=fileInputStream.read(b)) != -1) {
				zipOutputStream.write(b, 0, n);
			}
			zipOutputStream.flush();
			fileInputStream.close();
		}
		
		zipOutputStream.setComment("download success:" + rt +str);//zip註釋資訊
		zipOutputStream.flush();
		zipOutputStream.close();
		
		
	}

}


前臺頁面jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE>
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.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>
    <a target="_blank" href="<%=path%>/jsp/01.jsp">上傳01</a>
    <br>
    <a target="_blank" href="<%=path%>/jsp/02.jsp">下載02</a>
    <br>
    <a target="_blank" href="<%=path%>/jsp/03.jsp">批量下載03</a>
  </body>
</html>
01.jsp
<%@ 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>SmartUpload_批量上傳</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>
    <form action="<%=path%>/SmartUploadServlet.do" method="post" enctype="multipart/form-data">
  		上傳檔案1:<input id="myfile1" name="myfile1" type="file"/><br>
  		上傳檔案2:<input id="myfile2" name="myfile2" type="file"/><br>
  		上傳檔案3:<input id="myfile3" name="myfile3" type="file"/>
  		<input type="submit" value="提交"  />  ${result}
  	</form>
  </body>
</html>


02.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE>
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP '02.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>
    下載:<a href="<%=path %>/SmartDownloadServlet.do?filename=jplin-css.jpg">檔案</a>  ${result}
  </body>
</html>


03.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE>
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>批量下載</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>
    	<h3>批量下載</h3>
    	<form action="<%=path %>/BatchSmartDownloadServlet.do" method="post">
	    	<input type="checkbox" name="filename" value="jplugin-css.jpg"/>jplugin-css.jpg<br>
	    	<input type="checkbox" name="filename" value="jplugin-multiple.jpg"/>jplugin-multiple.jpg<br>
	    	<input type="checkbox" name="filename" value="jplugin-nocss.jpg"/>jplugin-nocss.jpg<br>
	    	
	    	<input type="submit" value="提交">
    	</form>
    	
    	
  </body>
</html>


相關推薦

檔案下載()--SmartUpload

一、簡介 SmartUpload一種java上傳元件包,可以輕鬆的實現檔案的上傳及下載功能。 使用該元件可以輕鬆的實現上傳檔案的限制,也可以輕易的取得檔案上傳的名稱、字尾、大小等。 三、具體實現例子【jsp+SmartUpload】 專案目錄 web.xml配置

檔案下載(二)--struts2

一、簡介 struts2在原有的上傳解析器繼承上做了進一步封裝,更進一步簡化了檔案上傳。 struts2預設使用的是Jakarta和Common-FileUpload的檔案上傳框架,因此,如果需要使用struts2的檔案上傳功能,則需要在web應用匯入相關jar包。 二、

Retrofit實現檔案下載

概述 通過前一篇的部落格介紹,我們已經對Retrofit的使用有了一個大概的瞭解,今天來講講利用Retrofit進行檔案的上傳和下載 檔案上傳 伺服器使用的是SSH框架,因此這裡是以struts2的方式來獲取資料的,我這裡定義了三個欄位用來接收上傳過來

IOS學習http非同步檔案下載以及進度指示

2016-02-12 13:05:07.330 network-demo[16708:1254465] =================request redirectResponse================= 2016-02-12 13:05:07.331 network-demo[16708:

struts2學習筆記十五(第15講.Struts2的檔案下載

[/code][b][size=xx-large]Struts2的檔案上傳和下載續三[/size][/b][color=red]功能:[/color]使用者可以自定義上傳檔案的個數,如果新增的個數多了的話,還可以進行刪減。一、修改之前根目錄下的upload.jsp檔案:[co

javaExcel檔案下載

上傳在頁面必須加上下面屬性 <form method="post" enctype="multipart/form-data" target="frameFile" action="${vehiclePath }/bindVehicle?${_csrf.parameterName}=$

xshell 檔案下載

xshell 檔案上傳和下載 介紹兩種方式:命令、工具 上傳和下載參照物件是本機 命令: 1.sz  檔案下載(檔案大小限制 4G) 2.rz 檔案上傳 工具: File Transfer(工具欄中有) 這個沒有上

Struts2的檔案下載(1)單檔案

在struts2中整合fileuoload功能,因為在匯入的jar包中包含了common-fileipload.jar檔案 在struts2中的interceptor 中有一個fileupload攔截器,他的主要功能就是完成檔案上傳。 注意事項 method=post

SpringMVC檔案下載

1. 檔案上傳 SpringMVC通過MultipartResolver來實現檔案上傳,預設沒有裝配,使用MultipartResolver需要加上commons-fileupload這個jar包。 1.1 配置MultipartResolver <!--配置上傳檔案控制元

**#使用springboot進行檔案下載**

使用springboot進行檔案上傳和下載 ##檔案下載功能的實現思路: 1.獲取要下載的檔案的絕對路徑 2.獲取要下載的檔名 3.設定content-disposition響應頭控制瀏覽器以下載的形式開啟檔案 4.獲取要下載的檔案輸入流 5.建立資料緩衝區//緩衝區解釋

asp.net 檔案下載管理原始碼

    利用asp.net進行檔案上傳和下載時非常常用的功能,現做整理,將原始碼上傳,提供給初學者參考,以下程式碼中的樣式檔案就不上傳了,下載者請將樣式去掉。 效果圖如下: <%@ Page Language="C#" AutoEventWireu

基於OkHttp網路通訊工具類(傳送get、post請求、檔案下載)

一、為什麼要用OkHttp? okhttp是專注於提升網路連線效率的http客戶端。 優點: 1、它能實現同一ip和埠的請求重用一個socket,這種方式能大大降低網路連線的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了伺服器伺服器的壓力。 2、okhttp 對

Spring MVC中檔案下載

檔案上傳 檔案上傳需將表格的提交方式設為"POST",並且將enctype設為"multipart/form-data",以二進位制的方式提交資料。 spring mvc中可通過MultipartResolver監聽每個請求,如有上傳的檔案,則把請求封裝為MultipartH

ASP.NET實現檔案下載

###### 本文的開發配置 ###### .NET版本:.NET Framework 4.0 開發環境:Microsoft Visual Studio 2013 瀏覽器:IE、Chrome、FireFox等都行   1、搭建網站結構 建立一個新的目錄

Struts2的檔案下載(2)限制檔案的大小型別

要在struts.xml中對Action進行配置,要在Action配置中加入檔案過濾攔截器fileUpload。struts.xml的配置資訊如下所示: <package name="struts2" namespace="/" extends="struts-default">

Android關於FTP檔案下載功能詳解

Android關於FTP檔案上傳和下載功能詳解  更新時間:2017年09月21日 11:41:14   作者:一諾的祕密花園    我要評論 這篇文章主要為大家詳細介紹了Android關於FTP檔案上傳和下載功能,具有一定的參考價值,感興趣

Spring Boot 檔案下載

前言:以前的專案中檔案上傳下載會寫大量程式碼來實現,但是在Spring Boot中,簡化了大量程式碼,上傳只需要2行程式碼即可 package com.demo.controller; import com.demo.model.FileInfo; import org.

HDFS的檔案下載

Java API獲取HDFS的檔案資訊 1).獲取檔案屬性 環境:Windows Java API 函式:mkdir、FileStatus[]、listStatus、isDirectory @Test public void test1() throws Excep

檔案下載

檔案的上傳和下載 檔案上傳 檔案上傳的三要素 提供form表單,method必須是post form表單的enctype必須是multipart/form-data 提供 input type = “file” 型別輸入 檔案上傳注意的細

檔案下載的基礎知識

上傳使用者: 上傳檔案1: 上傳檔案2: 上傳檔案的表單注意項: ①請求方式必須是post ②使用file的表單域 ③使用multipart/form-data的請求編碼方式 1.什麼是multipart/form-data? 首先我們需要明白在html中