1. 程式人生 > >ajax頁面無重新整理上傳檔案

ajax頁面無重新整理上傳檔案

最近在研究struts2檔案上傳,感覺這塊無論是做企業網站還是做系統都用的挺多的,尤其是圖片上傳。但是上傳我們又有幾種方式,一種是表單提交,一種是ajax無重新整理上傳。
這次我要介紹的就是struts2+ajax無重新整理上傳圖片,將圖片儲存在本地,圖片將以路徑的形式儲存在資料庫裡,我們在讀取的時候只需要讀取圖片路徑,系統就會去所在路徑找到對應圖片並顯示。
我們在做圖片上傳時除了基礎的jar包外,還需用到struts2-json-plugin.jar。我用的是2.3.24版的。
本系統前端需要引入ajaxfileupload.js和jquery.min.js兩個js控制元件。
正式流程如下:前端頁面顯示有file控制元件,點選file控制元件,找到上傳圖片,執行onchange事件,通過strtus的json在struts.xml中配置,然後在action中寫入對應uploadfile方法,返回imageString圖片路徑。
關於前臺頁面的處理:
頁面顯示寫法如下,a標籤中class為樣式,input的type為file檔案型別:

<td colspan="2"><a href="javascript:;" class="a-upload">
   <input type="file" name="imgTitle" id="imgTitle"  onchange="uploadFile();"                   accept="image/gif,image/jpeg,image/jpg,image/png">點選這裡上傳檔案</a>
<div id="images"></div></td>

樣式如下:

.input
{ border:1px solid #dbdbdb; width:256px; height:25px; line-height:25px;} .a-upload { padding: 4px 10px; height: 20px; line-height: 20px; position: relative; cursor: pointer; color: #993300; background: #fafafa; border: 1px solid #ddd; border-radius: 4px; overflow: hidden
; display: inline-block; *display: inline; *zoom: 1
} .a-upload input { position: absolute; font-size: 100px; right: 0; top: 0; opacity: 0; filter: alpha(opacity=0); cursor: pointer } .a-upload:hover { color: #444; background: #eee; border-color: #ccc; text-decoration: none }

點選onchange,執行js如下:

    function uploadFile() {
         if ($("#imgTitle").val().length > 0) {
             ajaxFileUpload();
         }
         else {
             alert("請選擇圖片");
         }
    }
function ajaxFileUpload() {
        var imgName = $("input[name='designProject.imgTitle']").val();
        $.ajaxFileUpload({
                url: 'admin/uploadFile', //用於檔案上傳的伺服器端請求地址
                type: 'post',
                secureuri: false, //一般設定為false
                fileElementId: 'imgTitle', //檔案上傳空間的id屬性  <input type="file" id="file" name="file" />
                dataType: 'JSON', //返回值型別 一般設定為json
                data:{'oldImageString':imgName},
                success: function (imageString, status)  //伺服器成功響應處理函式
                {
                    if(""!=imageString && "0"==imageString.substr(0,1)) {
                        alert(imageString.substr(1,imageString.length-1));
                        return false;
                    }
                    imageString = imageString.replace(/\\/g, '');
                    var aa="<img src="+imageString+" width='150px;' height='150px;' />";
                    aa += "<input type='hidden' value="+imageString+" id='imgTitle' name='designProject.imgTitle' />";
                    $("#images").html(aa);
                },
                error: function (data, status, e)//伺服器響應失敗處理函式
                {
                    alert("error="+e);
                }
            });
        return false;
    }

Struts2寫法如下注意是json格式:

<package name="admin_json" namespace="/admin" extends="json-default">
<action name="uploadFile" class="designAction" method="uploadFile">
        <result type="json">
            <param name="root">imageString</param>
        <param name="contentType">text/html</param>
        </result>
</action>
</package>

Action寫法如下:

private String imageString;
private File imgTitle; 
private String imgTitleFileName; // 檔名稱
private String imgTitleContentType; // 檔案型別
public String uploadFile() {
        try {           ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
            String realpath = this.getClass().getClassLoader().getResource("").getPath();
            realpath = realpath.split("WEB-INF/classes")[0] + "uploadFile/";
            File savedir = new File(realpath);
            if (!savedir.getParentFile().exists())
                savedir.getParentFile().mkdirs();
            String looppath = "uploadFile/";
            Date datenew = new Date();
            SimpleDateFormat simpleDateFormatnew = new SimpleDateFormat("yyyyMMddhhmmss");
            imageString = "";
            if (imgTitle != null) {
                int last = imgTitleFileName.lastIndexOf(".");
                String type = imgTitleFileName.substring(last);
                if (!".jpg".equals(type.toLowerCase()) && !".jpeg".equals(type.toLowerCase())
                        && !".gif".equals(type.toLowerCase()) && !".png".equals(type.toLowerCase())) {
                    imageString = "0上傳圖片格式不正確,只能是jpg,gif,jpeg,png格式";
                    return SUCCESS;
                }
                imgTitleFileName = simpleDateFormatnew.format(datenew) + "_00" + type;
                File savefile = new File(savedir, imgTitleFileName);
                FileUtils.copyFile(imgTitle, savefile);
                imageString = looppath + imgTitleFileName;
            }catch (Exception e) {
            e.printStackTrace();
        }
        return SUCCESS;

Java類中全域性變數需要有對應的get和set方法。最後返回前端的為imageString圖片路徑,該圖片路徑用於儲存至資料庫的路徑。需json傳值至前端,在form表單提交整體資訊的時候提交即可。

created by 李曉晴

相關推薦

ajax頁面重新整理檔案

最近在研究struts2檔案上傳,感覺這塊無論是做企業網站還是做系統都用的挺多的,尤其是圖片上傳。但是上傳我們又有幾種方式,一種是表單提交,一種是ajax無重新整理上傳。 這次我要介紹的就是struts2+ajax無重新整理上傳圖片,將圖片儲存在本地,圖片將以

form+iframe+file 頁面重新整理檔案並獲取返回值

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><but

jQuery+php+ajax實現重新整理檔案功能

jQuery+php+ajax實現無重新整理上傳檔案功能,還帶有上傳進度條動畫效果,支援圖片、視訊等大檔案上傳。 js程式碼

檔案的動作不能太俗,必須頁面重新整理

常規操作上傳檔案 1 <form action="xxx.action" method="post" enctype="multipart/form-data"> 2 <input type="file" name="userfile" multiple><br&

基於jQuery的ajax系列之用FormData實現頁面重新整理

接著上一篇ajax系列之用jQuery的ajax方法向伺服器發出get和post請求寫,這篇主要寫如何利用ajax和FormData實現頁面無重新整理的檔案上傳效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData介面。

模仿Ajax的動態重新整理檔案

使用到的jar檔案:commons-fileupload-1.3.jar,commons-io-2.4.jar jsp頁面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

通過Ajax使用FormData物件重新整理檔案

寫在前面:本文說的這個方案有瀏覽器相容性問題;所有主流瀏覽器的較新版本已經支援這個物件了,比如Chrome 7+、Firefox 4+、IE 10+、Opera 12+、Safari 5+,對相容性比較敏感的網站慎用。 在工作中遇到了一個問題:在一個頁面中,有4塊內容

jquery ajax 重新整理檔案到servlet

刪除檔案的表單要加入如下enctype屬性: <form id="upload" enctype="multipart/form-data"><!--//由於使用ajax上傳,不用加action和method屬性--> 要實現無重新整理上傳檔案首

ajax重新整理檔案MVC

@{ ViewBag.Title = " Assistant"; //Layout = null; } <script type="text/javascript"> $(document).ready(function () {

form+iframe實現重新整理檔案

原理: 利用form的target屬性,將form的action在iframe中開啟,並接收返回結果,實現仿ajax的頁面無重新整理檔案上傳。 正是action在iframe中開啟,所以,頁面才會無重

如何使用ajax實現重新整理

詳細程式碼如下 9.upload.html <!DOCTYPE HTML> <html> <head> <meta http-equiv="Cont

iframe實現重新整理檔案

其實在ajax出現之前,web應用也可以是無重新整理的,那時大多通過IFrame來做到這一點。當然Ajax出現之後,人們一窩蜂地投奔Ajax 的陣營了,iFrame 就乏人問津了。但是用iFrame來實現無重新整理上傳檔案確實一個很好的選擇。 [html] vi

struts2使用form表單重新整理檔案

這幾天在做專案時有用到一個form表單來上傳多個檔案,並且要求不能重新重新整理。當時在做的時候由於不是很瞭解這個東西,導致還是走了一些彎路的,現在把程式碼貼出來,供大家一起交流 html程式碼 <div id="book" style="display:none; b

基於iframe的重新整理檔案,並返回結果

<!-- 將target配置成一個隱藏的iframe --> <form id= "form1" enctype ="multipart/form-data" action= "/F

Javascript與asp.net 實現Ajax檔案重新整理

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w

ajaxfileupload.js外掛結合一般處理檔案實現Ajax重新整理

先上幾張圖更直觀展示一下要實現的功能,本功能主要通過Jquery ajaxfileupload.js外掛結合ajaxUpFile.ashx一般應用程式處理檔案實現Ajax無重新整理上傳功能,結合NPOI2.0實現資料讀取。這個功能在實際工作種經常用到,希望能

Struts2+Ajax+Jquery的重新整理圖片

####備註:這裡不詳細講解Struts2的檔案上傳知識點,想了解請點選我另外一篇文章 http://blog.csdn.net/qq_25281057/article/details/52333677 ###這裡我引用了兩個js檔案,一個Jquery和一個form表單

利用js實現重新整理頭像(或檔案)並顯示進度條

無重新整理上傳原理:現在我們利用新技術FormData表單資料物件可以實現快速收集表單資訊,普通表單域 和 上傳檔案域 均可以收集,再結合ajax就可以實現無重新整理上傳。 那麼怎樣顯示進度條呢?原來ajax物件有upload成員,該成員也是物件,構造器是XMLHttpR

ajax重新整理圖片,基於springMVC

html程式碼(圖片上傳Fform表單裡的target屬性的值frameFile,是form之後的iframe的name值, 這樣的寫法是讓當前的form表單在提交表單內容的時候轉交給iframe中進行頁面中表單處理, 並且不會產生當前頁面跳轉!): <form id

重新整理圖片的幾種方式

背景知識: 無重新整理上傳圖片主要還是為了在提交表單之前進行圖片的預覽。使用者體驗相對於提交表單跳轉顯示圖片的方式總還是要好一些的。 本文主要介紹三種無重新整理上傳圖片的方式   1.使用iframe子頁面的形式達到無重新整理上傳圖片的功能。首先設定一個隱藏的i