1. 程式人生 > >smartupload實現檔案的上傳、下載

smartupload實現檔案的上傳、下載

package com.yc.util;


import java.io.IOException;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;


import com.jspsmart.upload.File;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.Request;
import com.jspsmart.upload.SmartUpload;
import com.jspsmart.upload.SmartUploadException;


public class UploadUtil {
private static final String PATH = "images"; // 儲存圖片的資料夾
private static final String ALLOWED = "gif,jpg,png,jpeg"; // 可以上傳的檔案型別
private static final String DENIED = "exe,bat,jsp,html,com"; // 不可以上傳的檔案型別
private static final int TOTALMAXSIZE = 20 * 1024 * 1024; // 最多上傳的大小
private static final int SINGLEFILESIZE = 1024 * 1024; // 最多單個檔案在小


/**
* 用於從頁面上下文中讀取到request請求中傳過來的字串引數及檔案引數

* @param context
*            :頁面上下文
* @return Map 鍵值 name-> 張三
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public Map<String,String> upload(PageContext context){
SmartUpload su = new SmartUpload();
// File f=null; //臨時變數用來存每個上傳的檔案, 不是io中的,而是smartupload
// 開始取出頁面所有傳來的字元引數
Map<String, String> params = new HashMap<String, String>();


// 初始化
try {
su.initialize(context);
// 設定引數
su.setAllowedFilesList(ALLOWED);// 設定允許上傳的檔案(通過副檔名限制)
su.setDeniedFilesList(DENIED);   //設定禁止上傳的檔案(通過副檔名限制) 
su.setCharset("utf-8");
su.setTotalMaxFileSize(TOTALMAXSIZE); // 限制總上傳資料的長度。
su.setMaxFileSize(SINGLEFILESIZE);


su.upload();// 開始接收上傳
//int count = su.save("/upload");  // 將上傳檔案全部儲存到指定目錄




//下載新建一個
//SmartUpload su = new SmartUpload(); 


//初始化
//su.initialize(pageContext);  


//設定contentDispositio為null以禁止瀏覽器自動開啟檔案


//保證點選連結後是下載檔案。若不設定,則下載的副檔名為doc時,
//瀏覽器將自動用word開啟它。副檔名為pdf時,瀏覽器將用acrobat開啟。
//su.setContentDisposition(null); 
// 載檔案
//su.downloadFile("/upload/test.doc"); 


// 從su中取出封裝request
Request request = su.getRequest(); // 注意這個reqeust請滶物件是smartupload提供


Enumeration et=request.getParameterNames(); //獲取請求中的所有表單元素資訊
String str;


while(et.hasMoreElements()){
str=String.valueOf(et.nextElement());
params.put(str,request.getParameter(str));
}
// 取出上傳的檔案流
if (su.getFiles() != null && su.getFiles().getCount() > 0) {
Files fs = su.getFiles();
Collection<File> col = fs.getCollection();
String fname;
String picPath="";
for (File f : col) {
if (!f.isMissing()) { // 判斷檔案在上傳的過程中是否丟失
// 檔名有可能重複,所以不能用原檔名,必須重生成一個新檔名,
fname = PATH+"/"+new Date().getTime() + ""+ new Random().nextInt(10000)+"."+f.getFileExt(); // 取得原檔案的字尾名
System.out.println("檔案會儲存到:" + fname);


// 儲存
f.saveAs(fname, SmartUpload.SAVE_VIRTUAL);
picPath+=fname;
}
}
picPath+=picPath.substring(0,picPath.lastIndexOf(",")); //去掉最後的那個逗號
params.put("picPath",picPath); // 取出最後存的檔名,儲存到params
}

} catch (ServletException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} catch (IOException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} catch (SQLException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} catch (SmartUploadException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
}
return params;
}

/**
* 檔案下載
* @param filePath:要下載的檔案路徑
* @param response:響應
* @param context:檔案上下文
*/
public void downLoadFile(String filePath, HttpServletResponse response,PageContext context){
try {
SmartUpload su=new SmartUpload();  
su.initialize(context);  
//設定contentDisposition為null以禁止瀏覽器自動開啟檔案 
//保證點選連線後是下載檔案。若不設定,則下載的副檔名為doc時
//瀏覽器將自動用word開啟。副檔名為pdf時,瀏覽器將用acrobat開啟  
su.setContentDisposition(null);  
//下載檔案  


su.downloadFile(filePath);
} catch (SmartUploadException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} catch (ServletException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} catch (IOException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
} finally{
try {
response.getOutputStream().close();
} catch (IOException e) {
LogUtil.log.error(e.toString());
throw new RuntimeException(e);
}  
}   
}
}

相關推薦

十三根據HDFS提供的API,實現檔案下載刪除重新命名移動

一、 根據HDFS提供的API,實現以下功能: 針對檔案: 上傳、下載、刪除、重新命名、移動 package HdfsApi; import java.io.File; import java.io.FileInputStream; import java.io.IOExc

commons-fileupload實現檔案下載線上開啟

最近做了一個檔案上傳、下載、與線上開啟檔案的功能,剛開始對檔案上傳的介面中含有其它表單(例如輸入框、密碼等)在上傳的過程中遇到了許多問題,下面我寫了一個同時實現檔案上傳、下載、線上開啟檔案的測試程式。 首先請看效果圖: 核心程式碼:

php 通過ssh2協議用sftp實現檔案下載

伺服器的連線 $connection=ssh2_connect($host, $port); if( ssh2_auth_pubkey_file($connection, $send_account,

js+jstl+servlet實現檔案列表展示及檔案下載

檔案上傳 1.upload.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert

Java 實現ftp 檔案下載和刪除

本文利用apache ftp工具實現檔案的上傳下載和刪除。具體如下: 1、下載相應的jar包      commons-net-1.4.1.jar 2、實現程式碼如下: public class FtpUtils { //ftp伺服器地址

java 中 FtpClient 實現 FTP 檔案下載

package ftp; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWrit

java使用Jsch實現遠端操作linux伺服器進行檔案下載,刪除和顯示目錄資訊

1 package com.fline.aic.utils; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import jav

Java實現帶表單引數的檔案下載檔案打包下載

準備工作 知識準備 SpringBoot Maven Spring Data JPA 工具準備 IDE:IDEA 說明 在此專案中, 我將檔案上傳的一些引數(例如上傳路徑、下載路徑、檔名等)儲存在資料庫當中,這樣更加靈活。當專案部署後,只需要更改資料庫中的資

springBoot 簡單優雅是實現檔案下載

前言 好久沒有更新spring Boot 這個專案了。最近看了一下docker 的知識,後期打算將spring boot 和docker 結合起來。剛好最近有一個上傳檔案的工作呢,剛好就想起這個腳手架,將檔案上傳和下載整理進來。 配置 在application.properties 中增加上傳檔案存放的路徑配

JSch包實現SFTP下載

-- sch ftp上傳 sftp 實現 gpo AC raft epo JSch包maven倉庫地址: <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --> <dependency>

struts2實現檔案下載功能

一、Demo介紹 基於struts2框架,實現多檔案的上傳和下載功能。 實現原理圖: 部分介面圖: 上傳成功及下載頁面: 二、主要程式碼 uploadFile.jsp:在form表單中包含一個文字框(上傳使用者的姓名)和兩個檔案上傳選項. <%@

struts2攔截器與檔案下載

1、攔截器 定義一個action。. TestAction.java package com.zking.study.five; /** * 用於測試的action,與普通action沒啥區別 */ public class TestAction{ public Str

ASP.NET實現檔案下載

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

springcloud中feign檔案下載

檔案上傳、下載也是實際專案中會遇到的場景,本篇我們介紹下springcloud中如何使用feign進行檔案上傳與下載 。  還是使用feign 進行http的呼叫。 一、Feign檔案上傳 服務提供方java程式碼: /** * 檔案上傳 * @param fil

Javaweb學習筆記——(二十二)——————檔案下載Javamail

 檔案上傳概述      1.檔案上傳的作用          例如網路硬碟,就是用來上傳下載檔案的。          在網路瀏覽器中,時常需要上傳照片      2.檔案上傳對頁面的要求          上傳檔案的要求比較多。需要記住              1.必

Java實現檔案下載

上面的博文我寫了Java對檔案操作的功能https://blog.csdn.net/qq_24380635/article/details/83273359,這次記錄一下檔案上傳和下載的功能。看看兩者有什麼不同,就可以知道檔案操作和檔案上傳下載有什麼不同了。我也是一點點懂,也

又拍雲 Node.js 實現檔案刪除

Node.js 服務端 使用 Node.js + Express.js 實現 服務端 const express = require("express"); const app = express(); const axios = require('axios'); app.set('port', proc

struts攔截器與檔案下載

定義一個action。. TestAction.java package com.zking.study.five; /** * 用於測試的action,與普通action沒啥區別 */ public class TestAction{ pub

form檔案下載,獲取返回值

將form的target值指向一個iframe的name值,檔案上傳、下載後獲取iframe的內容: <form target="name" method="post" action="下載路徑" enctype="multipart/form-d

Android Retrofit2.0實現檔案下載

這篇主要介紹retrofit框架的上傳檔案到伺服器和從伺服器下載功能的實現 上傳檔案到伺服器 首先 retrofit2.0之前上傳檔案到伺服器需要一個叫TypedFile這個類,但是在2.0版本,這個類被取消了,因為2.0以後,retrofit內部集成了okhttp