1. 程式人生 > >java多圖片上傳功能的實現

java多圖片上傳功能的實現

開發環境:jdk1.7,MyEclipse10
框架用的是spring。用到了maven工具(maven的包百度下就可以)。

四步完成,全部複製改引數就可以

第一步:先在Spring中對圖片進行限制

<!-- SpringMVC上傳檔案時,需要配置MultipartResolver處理器 -->
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
                <property
name="defaultEncoding" value="UTF-8"/>
<!-- 指定所上傳檔案的總大小不能超過500KB。注意maxUploadSize屬性的限制不是針對單個檔案,而是所有檔案的容量之和。 這個的大小是以位元組為單位的,要多大自己算好了再設定--> <property name="maxUploadSize" value="500000"/> <!-- 最大記憶體大小 (10240)--> <property name="maxInMemorySize" value="40960"
/>
</bean>

第二步:寫jsp頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html> <head> <script type="text/javascript" src="../js/jquery-1.7.1.min.js"></script> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>上傳圖片</title> </head> <body> <form action="filesUpload" method="POST" name="xiangmu" id="xiangmu" enctype="multipart/form-data"> <table> <tr> <td>身份證圖片上傳:</td> <td><input type=file name="myfiles" id="doc" onchange="showImage();"> </td> <div id="localImag"> <img id="preview" width=-1 height=-1 style="diplay:none" /> </div> </tr> <tr> <td>公司運營情況:</td> <!-- 為了實現張圖片上傳,上傳框這個name要都一樣 --> <td><input type="file" name="myfiles" id="doc1"></td> <td> </td> </tr> <tr> <td><input type="submit" value="提交" /> </td> </tr> </table> </form> </body> </html>

注意:
多圖上傳,上傳框的name要都一樣,等於傳送了一個MultipartFile[]陣列。
不僅支援上傳圖片,還支援多檔案上傳。
form的enctype=”multipart/form-data”,這個是上傳檔案必須的。

第三步:如果你要實現頁面展現圖片的功能,就在jsp頁面新增下面的方法:

<script type="text/javascript">
    function showImage() {
        var docObj = document.getElementById("doc");
        var imgObjPreview = document.getElementById("preview");
        if (docObj.files && docObj.files[0]) {
            //火狐下,直接設img屬性  
            imgObjPreview.style.display = 'block';
            imgObjPreview.style.width = '300px';
            imgObjPreview.style.height = '120px';
            //imgObjPreview.src = docObj.files[0].getAsDataURL();  
            //火狐7以上版本不能用上面的getAsDataURL()方式獲取,需要一下方式  
            imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
        } else {
            //IE下,使用濾鏡  
            docObj.select();
            var imgSrc = document.selection.createRange().text;
            var localImagId = document.getElementById("localImag");
            //必須設定初始大小  
            localImagId.style.width = "250px";
            localImagId.style.height = "200px";
            //圖片異常的捕捉,防止使用者修改後綴來偽造圖片 
            try {
                localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
                localImagId.filters
                        .item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
            } catch (e) {
                alert("您上傳的圖片格式不正確,請重新選擇!");
                return false;
            }
            imgObjPreview.style.display = 'none';
            document.selection.empty();
        }
        return true;
    }
</script>

注意:這個方法只能上傳一張來顯示,除非你設定多個div。或者:展示多個圖片可以找找其他方法。

第四步:後臺接收

@RequestMapping("/filesUpload")
    //requestParam要寫才知道是前臺的那個陣列
    public String filesUpload(@RequestParam("myfiles") MultipartFile[] files,
            HttpServletRequest request) {
        List<String> list = new ArrayList<String>();
        if (files != null && files.length > 0) {
            for (int i = 0; i < files.length; i++) {
                MultipartFile file = files[i];
                // 儲存檔案
                list = saveFile(request, file, list);
            }
        }
        //寫著測試,刪了就可以
        for (int i = 0; i < list.size(); i++) {
            System.out.println("集合裡面的資料" + list.get(i));
        }
        return "index";//跳轉的頁面
    }

    private List<String> saveFile(HttpServletRequest request,
            MultipartFile file, List<String> list) {
        // 判斷檔案是否為空
        if (!file.isEmpty()) {
            try {
                // 儲存的檔案路徑(如果用的是Tomcat伺服器,檔案會上傳到\\%TOMCAT_HOME%\\webapps\\YourWebProject\\upload\\資料夾中
                // )
                String filePath = request.getSession().getServletContext()
                        .getRealPath("/")
                        + "upload/" + file.getOriginalFilename();
                list.add(file.getOriginalFilename());
                File saveDir = new File(filePath);
                if (!saveDir.getParentFile().exists())
                    saveDir.getParentFile().mkdirs();

                // 轉存檔案
                file.transferTo(saveDir);
                return list;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return list;
    }

注意:upload是資料夾,自己新建下再執行,免得出錯。

結束,全部複製就可以實現了。