1. 程式人生 > >jQuery的uploadify外掛實現檔案跨域上傳

jQuery的uploadify外掛實現檔案跨域上傳

1、jQuery的uploadify外掛官網地址:

http://www.uploadify.com/documentation/

2、按照官網要求下載指定的js,css程式碼與swf檔案

<script src="uploadify/jquery.uploadify.js"></script>
<link rel="stylesheet" href="uploadify/uploadify.css">

3、檔案上傳的程式碼模板:

html中新增按鈕標籤:

<div style="float: left"><input type="file" name="file_upload" id="file_upload" /></div>
<div style="float: left"><a href="javascript:$('#file_upload').uploadify('upload','*')">上傳錄音</a></div>
<div></br></div>
<div id="fileQueue"></div>
js邏輯程式碼:
$("#file_upload").uploadify({
'method':'post',
//手動上傳
'auto' : false,
//自定義按鈕名字
'buttonText' : '選擇錄音',
//指定swf檔案位置
'swf' : '/sap/uploadify/uploadify.swf',
//指定上傳的路徑
            'uploader'    : 'http://10.0.0.160:8080/sap' + '/voiceUpload/uploadVoice',
            //指定按鈕的長寬高
            'height' : 28,
            'width' : 100,
//在瀏覽視窗底部的檔案型別下拉選單中顯示的文字
            'fileTypeDesc' : 'Files',
            //允許上傳的檔案字尾
            'fileTypeExts' : '*.wav; *.pcm; *.mp3',
            //上傳檔案頁面中,你想要用來作為檔案佇列的元素的id, 預設為false  自動生成,  不帶#
            'queueID' : 'fileQueue',
            //設定為true將允許多檔案上傳
            'multi' : true,
            //設定選擇檔案的事件
            'onSelect' : function(file) {
                voiceNumber += file.id + ",";
                voiceName += file.name  + ",";
                voiceSize += file.size  + ",";
                voiceType += file.type + ",";
                selectCount += 1;

            },
//上傳成功後執行
            'onUploadSuccess': function (file, data, response) {
                $('#' + file.id).find('.data').html(' 上傳完畢');
                //檔案上傳完成後將資料自增一
                voiceCount += 1;
                //在檔案上傳成功之後 獲取當前資料 新增timeout
                if(voiceCount == selectCount) {
                    $timeout(function () {
                        $scope.showConfirm = true;
                        $scope.confirmMessage = "是否進行轉寫";
                        $scope.modalFlag = true;
                    },300);
                };

            },
            'onUploadError': function (file) {
                $scope.knowMessage = "上傳載入失敗";
                $scope.showKnowFlag = true;
            }

        });

注意:錄音上傳成功的回撥函式為每上傳一條成功就進行回撥,我在這裡通過onSelect事件判斷獲取錄音的條數,通過條數控制當所有的錄音都上傳成功後進行之後的邏輯。

4、為了實現跨域請求我們需要下載配置xml檔案

crossdomain.xml

內容如下:

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
	<site-control permitted-cross-domain-policies="all" />
	<allow-access-from domain="*" />
	<allow-http-request-headers-from domain="*" headers="*" />
</cross-domain-policy>

將檔案放到tomcat的根目錄下:

E:\xxx\Tomcat7\webapps\ROOT

如果是idea編譯器需要配置 External Source,將root路徑新增上。

5、java端接收檔案程式碼:

/**
     * 將錄音上傳到指定路徑
     * @param request
     * @return
     */
    @RequestMapping(value = "/uploadVoice")
    @ResponseBody
    public ResultMessage uploadVoice(HttpServletRequest request) {
        //建立返回值
        ResultMessage rm = new ResultMessage();
        try {
            //建立檔案工廠
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //建立檔案上傳解析器
            ServletFileUpload upload = new ServletFileUpload(factory);
            //設定檔名編碼
            upload.setHeaderEncoding("UTF-8");
            //解析上傳資料
            List<FileItem> items = upload.parseRequest(request);
            //遍歷結果集
        for(FileItem item : items) {
                //上傳的是檔案
                if(!item.isFormField()) {
                    //獲取檔名
                    String filename = item.getName();
                    //獲取檔案輸出流
                    InputStream inputStream = item.getInputStream();
                    //建立檔案輸出流
                    FileOutputStream outputStream = new FileOutputStream("C:\\Users\\xxx\\Desktop\\output\\"+filename);
                    //建立快取區
                    byte[] bytes = new byte[1024];
                    //建立讀取標識
                    Integer len = 0;
                    //迴圈輸出
                    while((len=inputStream.read(bytes)) > 0) {
                        outputStream.write(bytes,0,len);
                        outputStream.flush();
                    }
                    inputStream.close();
                    outputStream.close();
                    item.delete();
                }
            }
            rm.setMessage("檔案上傳成功");
            rm.setSuccess(true);
        } catch (Exception e) {
            e.printStackTrace();
            rm.setMessage("檔案上傳失敗");
            rm.setSuccess(false);
        }
        return rm;
    }

6、此時實現了檔案的跨域上傳!

這個外掛實現檔案上傳時是將檔案以Content-type為application/octet-stream的形式進行上傳,二進位制流的形式進行上傳,對於限制檔案型別存在缺陷。






相關推薦

jQuery的uploadify外掛實現檔案

1、jQuery的uploadify外掛官網地址: http://www.uploadify.com/documentation/ 2、按照官網要求下載指定的js,css程式碼與swf檔案 <script src="uploadify/jquery.uploadi

JSP Ueditor 實現圖片

img 上傳 .com 圖片 地址 ued 跨域 image con Ueditor的單圖上傳,在官方文檔上明確寫了不支持 然後通過百度找了許多方案,終於有一個可以解決了。 http://www.cnblogs.com/hpnet/p/6290452.html 不

js實現非同步

無聊寫點東西,希望對一些朋友有用,先上程式碼 這是前端程式碼 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>&l

個人經歷分享:一步一步實現vue+element+nodejs實現檔案

作者是一名一年多前端小白,最近公司新的需求,實現了這樣一個功能,將心路歷程一步一步記下來。 首先是前端整體框架是vue2.x+elementUI+nodejs(koa) 搭建的這樣一個專案 第一步: 要實現檔案上傳,首先想到的是表單上傳,OK,那麼沒問題,ele

HTML5 postMessage+iframe實現檔案非同步

前段時間因為專案需求,要實現圖片的跨域上傳,研究了一番後實現了這個功能,這裡做個記錄方便日後遇到同樣的問題,也給後來者做個參考。 目前為止我瞭解到的檔案非同步上傳的方式有以下幾種 flash控制元件 (IOS已經不支援flash了) HTML5 FormD

POST方式檔案

JSONP請求有限制: 第一,不能跳出兩層, 第二,不支援POST.  往往解決跨域POST請求的方案是個"古老"方法, 請求同域下的iframe. 伺服器端:  需要附加頭資訊: header('Access-Control-Allow-Origin: *

java用ajax實現圖片

說明 : 圖片伺服器是用Nginx搭建的,用的是Php語言 這個功能 需要 用到兩個js檔案: jquery.js和jquery.form.js <script type="text/javascript" src="js/jquery.js"></scr

ueditor富文本編輯器圖片解決辦法

etop cee 訪問 第一步 支持 fun 初始化 處理 顯示 在使用百度富文本編輯器的過程中,如果是有一臺單獨的圖片服務器就需要將上傳的圖片內容放到圖片服務器,也就是比如在a.com的編輯器上傳圖片,圖片要保存到img.com的跨域上傳圖片功能,而在ueditor官方文

SpringMVC下圖片檔案伺服器

圖片檔案跨伺服器上傳(我使用的公司雲桌面作為上傳伺服器,自己的筆記本作為儲存伺服器測試的) 一、上傳伺服器: 1、pom檔案(使用jersey外掛) <!-- 上傳元件包 --> <dependency> <gro

ueditor富文字編輯器圖片解決辦法

在使用百度富文字編輯器的過程中,如果是有一臺單獨的圖片伺服器就需要將上傳的圖片內容放到圖片伺服器,也就是比如在a.com的編輯器上傳圖片,圖片要儲存到img.com的跨域上傳圖片功能,而在ueditor官方文件中說不支援單圖上傳的跨域, 網上查了一下各種花裡胡哨,一頓操作猛如虎,比如加document.dom

vue+elemenui 圖片

.vue 檔案 主要注意這兩個: action 請求的地址。直接請求介面https://… 由於同源策略會出現跨域問題,需要後面配置代理,使本地可以跨域請求介面。 name 表單name值 <temeplate> <el-uplo

SSM中使用Kindeditor外掛實現圖片的批量與回顯

圖片上傳的方式: 1.上傳到資料庫中的Blob型別,從資料庫中取出來並顯示。詳細見下面連結 http://blog.sina.com.cn/s/blog_5b0745e80102we31.html 2.上傳到伺服器的固定目錄下,在資料庫中僅儲存圖片的地址。詳細見下文 效果

php後端控制可的域名,允許圖片

跨域問題經常需要面對,前端需要做的比較直接 要麼選擇ajax非同步提交,XML或者jsonp,要麼表單提交 jsonp基本可以搞定大部分跨域問題,但問題也比較明顯,只能通過get方式提交 並且jsonp是通過把引數拼到URL上提交請求的 但是所有瀏覽器有URL長

bootstrap+fileinput外掛實現可預覽照片功能

            圖片.png實際專案中運用:圖片.png功能:實現上傳圖片,更改上傳圖片,移除圖片的功能<!DOCTYPE html><html>    <head>        <metacharset="UTF-8">        <tit

使用AJAX實現檔案拖拽功能詳解

概述 對於微雲、百度雲等網盤提供的檔案儲存服務而言,檔案上傳是一個重要功能。檔案上傳的方式主要有兩種:二進位制資料上傳、表單上傳。本文會詳細解析表單上傳的協議規範,前端上傳檔案的兩種方式:對話方塊選擇方式、拖拽選擇方式,服務端接收上傳的檔案以及檔案上傳

js實現檔案拖拽並顯示待檔案列表

首先實現html頁面的內容:<body> <div name="single" style="text-align: center; "> <A class=btn_addPic href="javascript:void

關於使用百度編輯器(ueditor編輯器)將圖片到獨立伺服器的問題

最近公司要使用ueditor編輯器,但是關於跨域上傳的問題,出現了很多不可預料的錯誤,一次次的除錯,一個個的坑,現在終於完成了,把過程寫下來分享給大家,希望大家支援,因為我在百度上查了很久,也沒有找到一個合適的。 首先本地使用ueditor編輯器,這個自己百度,這裡就不多說

使用 base64 解決

跨域上傳檔案是一件讓人頭疼的事情,不過今天我們可以用一種簡單的方法解決。直接上程式碼! 需要 js 檔案 (function () { window.onload = functi

利用putty實現檔案在linux和下載

利用putty實現檔案上傳和下載: 安裝putty軟體才能使用pscp功能 上傳 D:\devsoftware\linux>pscp d:\devsoftware\linux\jdk-8u181-linux-x64.rpm [email protec

使用xUtils3和RandomAccessFile來實現檔案的分片

     首先,想使用xUtils3需要先做好相應的配置,這裡就不詳細說了,詳細http://blog.csdn.net/a1002450926/article/details/50341173      在這裡我自己封裝了一個上傳檔案的方法,如下:       //檔案上