亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JSP > 正文

java使用smartupload組件實現文件上傳的方法

2020-07-27 21:31:59
字體:
來源:轉載
供稿:網友

本文實例講述了java使用smartupload組件實現文件上傳的方法。分享給大家供大家參考。具體分析如下:

文件上傳幾乎是所有網站都具有的功能,用戶可以將文件上傳到服務器的指定文件夾中,也可以保存在數據庫中,這里主要說明smartupload組件上傳。

在講解smartupload上傳前,我們先來看看不使用組件是怎么完成上傳的原理的?

廢話不多說直接上代碼:

復制代碼 代碼如下:
import java.io.*;
import java.util.*;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadTools {
    private HttpServletRequest request = null; // 取得HttpServletRequest對象
    private List<FileItem> items = null; // 保存全部的上傳內容
    private Map<String, List<String>> params = new HashMap<String, List<String>>();    // 保存所有的參數
    private Map<String, FileItem> files = new HashMap<String, FileItem>();
    private int maxSize = 3145728;                 // 默認的上傳文件大小為3MB,3 * 1024 * 1024
    public FileUploadTools(HttpServletRequest request, int maxSize,
            String tempDir) throws Exception {    // 傳遞request對象、最大上傳限制、臨時保存目錄
        this.request = request;                 // 接收request對象
        DiskFileItemFactory factory = new DiskFileItemFactory(); // 創建磁盤工廠
        if (tempDir != null) {                     // 判斷是否需要進行臨時上傳目錄
            factory.setRepository(new File(tempDir)); // 設置臨時文件保存目錄
        }
        ServletFileUpload upload = new ServletFileUpload(factory); // 創建處理工具
        if (maxSize > 0) {                        // 如果給的上傳大小限制大于0,則使用新的設置
            this.maxSize = maxSize;
        }
        upload.setFileSizeMax(this.maxSize);     // 設置最大上傳大小為3MB,3 * 1024 * 1024
        try {
            this.items = upload.parseRequest(request);// 接收全部內容
        } catch (FileUploadException e) {
            throw e;                             // 向上拋出異常
        }
        this.init();                             // 進行初始化操作
    }
    private void init() {                        // 初始化參數,區分普通參數或上傳文件
        Iterator<FileItem> iter = this.items.iterator();
        IPTimeStamp its = new IPTimeStamp(this.request.getRemoteAddr()) ;
        while (iter.hasNext()) {                // 依次取出每一個上傳項
            FileItem item = iter.next();         // 取出每一個上傳的文件
            if (item.isFormField()) {             // 判斷是否是普通的文本參數
                String name = item.getFieldName(); // 取得表單的名字
                String value = item.getString(); // 取得表單的內容
                List<String> temp = null;         // 保存內容
                if (this.params.containsKey(name)) { // 判斷內容是否已經存放
                    temp = this.params.get(name); // 如果存在則取出
                } else {                        // 不存在
                    temp = new ArrayList<String>(); // 重新開辟List數組
                }
                temp.add(value);                 // 向List數組中設置內容
                this.params.put(name, temp);     // 向Map中增加內容
            } else {                             // 判斷是否是file組件
                String fileName = its.getIPTimeRand()
                    + "." + item.getName().split("http://.")[1];
                this.files.put(fileName, item); // 保存全部的上傳文件
            }
        }
    }
    public String getParameter(String name) {     // 取得一個參數
        String ret = null;                         // 保存返回內容
        List<String> temp = this.params.get(name); // 從集合中取出內容
        if (temp != null) {                        // 判斷是否可以根據key取出內容
            ret = temp.get(0);                     // 取出里面的內容
        }
        return ret;
    }
    public String[] getParameterValues(String name) { // 取得一組上傳內容
        String ret[] = null;                     // 保存返回內容
        List<String> temp = this.params.get(name); // 根據key取出內容
        if (temp != null) {                        // 避免NullPointerException
            ret = temp.toArray(new String[] {});// 將內容變為字符串數組
        }
        return ret;                             // 變為字符串數組
    }
    public Map<String, FileItem> getUploadFiles() {// 取得全部的上傳文件
        return this.files;                         // 得到全部的上傳文件
    }
    public List<String> saveAll(String saveDir) throws IOException { // 保存全部文件,并返回文件名稱,所有異常拋出
        List<String> names = new ArrayList<String>();
        if (this.files.size() > 0) {
            Set<String> keys = this.files.keySet(); // 取得全部的key
            Iterator<String> iter = keys.iterator(); // 實例化Iterator對象
            File saveFile = null;                 // 定義保存的文件
            InputStream input = null;             // 定義文件的輸入流,用于讀取源文件
            OutputStream out = null;             // 定義文件的輸出流,用于保存文件
            while (iter.hasNext()) {            // 循環取出每一個上傳文件
                FileItem item = this.files.get(iter.next()); // 依次取出每一個文件
                String fileName = new IPTimeStamp(this.request.getRemoteAddr())
                        .getIPTimeRand()
                        + "." + item.getName().split("http://.")[1];
                saveFile = new File(saveDir + fileName);     // 重新拼湊出新的路徑
                names.add(fileName);            // 保存生成后的文件名稱
                try {
                    input = item.getInputStream();             // 取得InputStream
                    out = new FileOutputStream(saveFile);     // 定義輸出流保存文件
                    int temp = 0;                            // 接收每一個字節
                    while ((temp = input.read()) != -1) {     // 依次讀取內容
                        out.write(temp);         // 保存內容
                    }
                } catch (IOException e) {         // 捕獲異常
                    throw e;                    // 異常向上拋出
                } finally {                     // 進行最終的關閉操作
                    try {
                        input.close();            // 關閉輸入流
                        out.close();            // 關閉輸出流
                    } catch (IOException e1) {
                        throw e1;
                    }
                }
            }
        }
        return names;                            // 返回生成后的文件名稱
    }
}

上面代碼便可以完成無組件上傳。

下面開始講解smartupload

smartupload是由www.jspsmart.com網站開發的一套上傳組件包,可以輕松的實現文件的上傳及下載功能,smartupload組件使用簡單、可以輕松的實現上傳文件類型的限制、也可以輕易的取得上傳文件的名稱、后綴、大小等。

smartupload本身是一個系統提供的jar包(smartupload.jar),用戶直接將此包放到classpath下即可,也可以直接將此包拷貝到TOMCAT_HOME/lib目錄之中。

下面使用組件完成上傳

單一文件上傳:

復制代碼 代碼如下:
<html>
<head><title>smartupload組件上傳</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<form action="smartupload_demo01.jsp" method="post" enctype="multipart/form-data">
    圖片<input type="file" name="pic">
    <input type="submit" value="上傳">
</form>
</body>
</html>

jsp代碼:

smartupload_demo01.jsp

復制代碼 代碼如下:
<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*" %>
<html>
<head><title>smartupload組件上傳01</title></head>

<body>
 <%
    SmartUpload smart = new SmartUpload() ;
    smart.initialize(pageContext) ;    // 初始化上傳操作
    smart.upload();        // 上傳準備
    smart.save("upload") ;    // 文件保存
    out.print("上傳成功");
%>

</body>
</html>

批量上傳:

html文件


復制代碼 代碼如下:
<html>
<head><title>smartupload組件上傳02</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body>
<form action="smartupload_demo02.jsp" method="post" enctype="multipart/form-data">
    圖片<input type="file" name="pic1"><br>
    圖片<input type="file" name="pic2"><br>
    圖片<input type="file" name="pic3"><br>
    <input type="submit" value="上傳">
    <input type="reset" value="重置">
</form>
</body>
</html>

jsp代碼

smartupload_demo02.jsp

復制代碼 代碼如下:
<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*"%>
<%@ page import="com.zhou.study.*"%>
<html>
<head><title>smartupload組件上傳02</title></head>
<body>
<%
    SmartUpload smart = new SmartUpload() ;
    smart.initialize(pageContext) ;    // 初始化上傳操作
    smart.upload() ;            // 上傳準備
    String name = smart.getRequest().getParameter("uname") ;
    IPTimeStamp its = new IPTimeStamp("192.168.1.1") ;    // 取得客戶端的IP地址
    for(int x=0;x<smart.getFiles().getCount();x++){
        String ext = smart.getFiles().getFile(x).getFileExt() ;    // 擴展名稱
        String fileName = its.getIPTimeRand() + "." + ext ;
        smart.getFiles().getFile(x).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator + fileName) ;
    }
    out.print("上傳成功");
%>
</body>
</html>

注意:在TOMCAT_HOME/項目目錄下建立upload文件夾才能正常運行!

簡單上傳操作上傳后的文件名稱是原本的文件名稱??赏ㄟ^工具類重命名。

另附上重命名工具類。

復制代碼 代碼如下:
package com.zhou.study ;
import java.text.SimpleDateFormat ;
import java.util.Date ;
import java.util.Random ;
public class IPTimeStamp {
    private SimpleDateFormat sdf = null ;
    private String ip = null ;
    public IPTimeStamp(){
    }
    public IPTimeStamp(String ip){
        this.ip = ip ;
    }
    public String getIPTimeRand(){
        StringBuffer buf = new StringBuffer() ;
        if(this.ip != null){
            String s[] = this.ip.split("http://.") ;
            for(int i=0;i<s.length;i++){
                buf.append(this.addZero(s[i],3)) ;
            }
        }
        buf.append(this.getTimeStamp()) ;
        Random r = new Random() ;
        for(int i=0;i<3;i++){
            buf.append(r.nextInt(10)) ;
        }
        return buf.toString() ;
    }
    public String getDate(){
        this.sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") ;
        return this.sdf.format(new Date()) ;
    }
    public String getTimeStamp(){
        this.sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS") ;
        return this.sdf.format(new Date()) ;
    }
    private String addZero(String str,int len){
        StringBuffer s = new StringBuffer() ;
        s.append(str) ;
        while(s.length() < len){
            s.insert(0,"0") ;
        }
        return s.toString() ;
    }
    public static void main(String args[]){
        System.out.println(new IPTimeStamp().getIPTimeRand()) ;
    }
}

附上使用方法:

復制代碼 代碼如下:
<html>
<head><title>smartupload上傳文件重命名</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head>
<body>
<form action="smartupload_demo03.jsp" method="post" enctype="multipart/form-data">
    姓名<input type="text" name="uname"><br>
    照片<input type="file" name="pic"><br>
    <input type="submit" value="上傳">
    <input type="reset" value="重置">
</form>
</body>
</html>

Jsp代碼:

smartupload_demo03.jsp

復制代碼 代碼如下:
<%@ page contentType="text/html" pageEncoding="utf-8"%>
<%@ page import="com.jspsmart.upload.*" %>
<%@ page import="com.zhou.study.*"%>
<html>
<head><title>smartupload</title></head>
<body>
<%
    SmartUpload smart = new SmartUpload() ;
    smart.initialize(pageContext) ;    //初始化上傳操作
    smart.upload() ;    // 上傳準備
    String name = smart.getRequest().getParameter("uname") ;
    String str = new String(name.getBytes("gbk"), "utf-8");    //傳值過程中出現亂碼,在此轉碼
    IPTimeStamp its = new IPTimeStamp("192.168.1.1") ;    // 取得客戶端的IP地址
     String ext = smart.getFiles().getFile(0).getFileExt() ;    // 擴展名稱
    String fileName = its.getIPTimeRand() + "." + ext ;
    smart.getFiles().getFile(0).saveAs(this.getServletContext().getRealPath("/")+"upload"+java.io.File.separator + fileName) ; 
    out.print("上傳成功");
%>

<h2>姓名:<%=str%></h2>
<img src="upload/<%=fileName%>">
</body>
</html>

希望本文所述對大家的jsp程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美三级免费观看| 成人综合网网址| 欧美乱大交xxxxx另类电影| 亚洲韩国青草视频| 国模私拍视频一区| 精品欧美激情精品一区| 欧美日韩色婷婷| 日韩大胆人体377p| 中文字幕日韩精品有码视频| 日韩精品在线免费观看| 日韩在线一区二区三区免费视频| 国产精品久久久久久久久借妻| 亚洲成av人影院在线观看| 亚洲性无码av在线| 国产视频久久久久| 91精品久久久久久久久久| 国产黑人绿帽在线第一区| 亚洲欧美国产高清va在线播| 欧美色视频日本版| 欧美影院在线播放| 久久精品中文字幕一区| 国产一区二区黄| 欧美色道久久88综合亚洲精品| 日韩美女av在线免费观看| 日韩理论片久久| 欧美日韩亚洲一区二区三区| 福利一区视频在线观看| 亚洲欧美国产精品久久久久久久| 欧美日韩爱爱视频| 最新91在线视频| 中文字幕欧美精品在线| 欧美专区国产专区| 色婷婷久久一区二区| 亚洲免费视频网站| 狠狠久久亚洲欧美专区| 亚洲人成绝费网站色www| 97国产在线视频| 国产一区二区久久精品| 九色精品免费永久在线| 色狠狠久久aa北条麻妃| 亚洲精选一区二区| 日韩欧美在线视频日韩欧美在线视频| 亚洲欧美日韩一区二区在线| 亚洲精品99久久久久| 成人免费网视频| 久久久久久国产精品| 亚洲成人999| 亚洲美女在线观看| 亚洲国产精品va在线观看黑人| 国产精品jizz在线观看麻豆| 亚洲第一福利网| 姬川优奈aav一区二区| 夜夜躁日日躁狠狠久久88av| 精品国产91久久久久久老师| 欧美午夜精品久久久久久浪潮| 日韩电影第一页| 中文字幕亚洲综合久久筱田步美| 亚洲男人的天堂网站| 成人一区二区电影| 亚洲电影免费观看高清完整版| 精品国产成人在线| 色阁综合伊人av| 欧美在线视频免费观看| 亚洲肉体裸体xxxx137| 久久久久久久久久久久av| 热re91久久精品国99热蜜臀| 国产亚洲欧美一区| 国产在线a不卡| 欧美高清视频一区二区| 久久久99久久精品女同性| 精品中文视频在线| 欧美性xxxx在线播放| 久久久免费观看视频| 国产亚洲一区二区精品| 亚洲第一精品福利| 日韩免费电影在线观看| 亚洲欧美精品中文字幕在线| 91国产视频在线播放| 欧美视频不卡中文| 欧美色xxxx| 欧美午夜精品在线| 国产精品影片在线观看| 3344国产精品免费看| 精品动漫一区二区三区| 日韩在线视频网| 国产99在线|中文| 欧美又大又粗又长| 午夜精品久久久久久久99黑人| 午夜精品视频在线| 成人黄色激情网| 国内成人精品视频| 国产这里只有精品| 欧美老肥婆性猛交视频| 欧美激情日韩图片| 97av视频在线| 欧美激情网友自拍| 欧美尤物巨大精品爽| 国产精品久久久久999| 一区二区在线视频播放| 欧美另类极品videosbest最新版本| 91产国在线观看动作片喷水| 欧美一级片久久久久久久| 日韩av在线免费观看| 中文亚洲视频在线| 亚洲一区国产精品| 日韩电影中文字幕| 日韩电影在线观看中文字幕| 色一情一乱一区二区| 欧美日韩国产va另类| 国产精品视频一区二区高潮| 日本免费久久高清视频| 日本精品久久久久影院| 91精品国产色综合久久不卡98口| 97国产精品免费视频| 777国产偷窥盗摄精品视频| 欧美国产日韩xxxxx| 91av免费观看91av精品在线| 亚洲国产中文字幕在线观看| zzjj国产精品一区二区| 国产成人综合久久| 亚洲香蕉成视频在线观看| 精品久久中文字幕久久av| 亚洲系列中文字幕| 久久深夜福利免费观看| 懂色av中文一区二区三区天美| 一区国产精品视频| 久久精品最新地址| 国产亚洲成精品久久| 国产精品一区二区三区毛片淫片| 久久久国产精彩视频美女艺术照福利| 亚洲精品之草原avav久久| 一本一本久久a久久精品牛牛影视| 欧美—级a级欧美特级ar全黄| 日本欧美国产在线| 精品国产鲁一鲁一区二区张丽| 在线精品高清中文字幕| 欧美性xxxx18| 欧美野外wwwxxx| 日韩欧美一区二区在线| 日韩亚洲精品电影| 日韩视频亚洲视频| 日韩欧美中文第一页| 国产69久久精品成人| 久久天天躁夜夜躁狠狠躁2022| 久久精品国产一区二区三区| 亚洲精品久久久久久久久久久| 久久久亚洲欧洲日产国码aⅴ| 在线亚洲午夜片av大片| 久久精品久久久久久国产 免费| 777午夜精品福利在线观看| 欧美日韩在线第一页| 亚洲三级免费看| 国产精品国产亚洲伊人久久| 成人xvideos免费视频| 亚洲人成在线观看| 91av国产在线| 国语自产精品视频在线看抢先版图片| 精品成人在线视频| 亚洲欧美日韩国产中文| 日韩欧美aaa| 欧洲精品毛片网站| 俺去啦;欧美日韩| 亚洲免费视频在线观看| 日韩第一页在线|