1. 程式人生 > >前端上傳元件Plupload使用---上傳大視訊(分片上傳)

前端上傳元件Plupload使用---上傳大視訊(分片上傳)

上傳視訊到伺服器

1.引入js外掛:

<script type="text/javascript" src="{{ static_url('plupload/js/plupload.full.min.js') }}"></script>

2.html頁面如圖:

<script>
<label>上傳視訊:</label>
<input type="text" name="video_url" id="video_url" style="display: none">
<button class="btn new_btn-w-m btn-primary" href="#" id="video_upload_btn">上傳視訊
    <span id="Progress" style=" opacity: 0.6;z-index:10; position: absolute; bottom: 0; left: 0; height: 100%; width: 0%; display: block; background-color: #003399"></span>
</button>
<span class="color-gray">支援AVI、wma、rmvb、rm、flash、mp4、mid、3GP等格式</span>
<video controls='controls' style="margin-top: 10px;max-width: 400px;width: 100%;">
    <source src="" type='video/mp4' id="video">
</video>
<p class="showInfo"></p>
</script>

3.js程式碼

<script>
$(function () {
    var uploader_video = new plupload.Uploader({//建立例項的構造方法
        runtimes: 'gears,html5,html4,silverlight,flash', //上傳外掛初始化選用那種方式的優先順序順序
        browse_button: ['video_upload_btn'], // 上傳按鈕
        url: "/ajax/upload_video?path=videos", //遠端上傳地址
        // flash_swf_url: 'js/plugins/plupload/Moxie.swf', //flash檔案地址
        // silverlight_xap_url: 'js/plugins/plupload/Moxie.xap', //silverlight檔案地址
        filters: {
            max_file_size: '1gb', //最大上傳檔案大小(格式100b, 10kb, 10mb, 1gb)
            mime_types: [//允許檔案上傳型別
                {title: "files", extensions: "mpg,m4v,mp4,flv,3gp,mov,avi,rmvb,mkv,wmv"}
            ]
        },
        multipart_params: {
            '_xsrf': $("input[name='_xsrf']").val()
        },
        chunk_size: "50mb", //分片上傳檔案時,每片檔案被切割成的大小,為數字時單位為位元組。也可以使用一個帶單位的字串,如"200kb"。當該值為0時表示不使用分片上傳功能
        multi_selection: false, //true:ctrl多檔案上傳, false 單檔案上傳
        init: {
            FilesAdded: function(up, files) { //檔案上傳前
                plupload.each(files, function (file1) {
                    uploader_video.start();
                });
            },
            UploadProgress: function(up, file) { //上傳中,顯示進度條
                $('#Progress').css('width', file.percent+'%');
            },
            FileUploaded: function(up, file, info) { //檔案上傳成功的時候觸發
                var base = '/static/media/videos/';
                var response = $.parseJSON(info.response);
                if (response.status == 'ok') {
                    var url = "http://"+location.host+base + response.name;
                    $("#video").show().attr("src", url);
                    // console.log($("#video").parent());
                    $("#video").parent().get(0).load();
                    $("#video_url").val(url);
                }
                else {
                    alert(response.error);
                }
            },
            Error: function(up, errObject) { //上傳出錯的時候觸發
                alert(errObject.code+errObject.message);
            }
        }
    });
    uploader_video.init();
});
</script>

後端程式碼

1.url路由

(r"/ajax/upload_video", UploadVideoFile),

2.python程式碼

class UploadVideoFile(BaseHandler):
    def post(self):
        path = self.get_argument("path")
        input_name = self.get_argument("iname", "")
        nums = self.get_argument("chunks", "")
        num = self.get_argument("chunk", "")
        # 視訊檔名
        filename = self.get_argument("name", "")

        # 得到視訊的儲存路徑upload_path,就是視訊檔案在哪個資料夾下面
        upload_path = os.path.join(self.settings['upload_path'], path)
        print path, nums, num, filename, upload_path

        # 視訊儲存路徑+視訊檔名
        filepath = os.path.join(upload_path, filename)
        # 若不存在此目錄,則建立之
        if not os.path.isdir(upload_path):
            # upload_path = upload_path.replace("/", "\\") #windows platform
            os.makedirs(upload_path)
        file_metas = self.request.files.get('file', [])
        # filename = ''
        try:
            for meta in file_metas:
                filename = meta['filename']
                print filename
                # 下面註釋的地方不分片時需要用到,分片時用不到
                # ext = os.path.splitext(filename)[1]
                # 生成隨機檔名
                # filename = str(uuid.uuid4())
                # filename = '%s%s' % (filename, ext)
                # filepath = os.path.join(upload_path, filename)
                # filepath = os.path.join(upload_path, num)
                with open(filepath, 'ab') as up:
                    up.write(meta['body'])
        except Exception as e:
            print e
            return self.write(json.dumps({"status": 'error', "msg": u"視訊檔案上傳失敗,請重新上傳"}))
        else:
            print json.dumps({"status": 'ok', "msg": "", "base_url": "", "name": filename})
            return self.write(json.dumps({"status": 'ok', "msg": "", "base_url": "", "name": filename}))

傳送Ajax到後臺,把視訊或圖片儲存到資料庫(儲存的是地址) 

1.ajax程式碼:

$('.btn.btn-white.add_content').click(function () {
    if ($('#poster').attr('src') == '') {
        alert('您還未上傳內容照片!');
        return false;
    }

    if ($('#title').val() == '') {
        alert("內容標題不能為空!");
        return false;
    }
    var xjson = {
        "title": $("#title").val(),
        "brief": $("#brief").val(),
        "videourl" : $("#video_url").val(),
        "image": $("#image_url").val(),
        // "content": window.editor.html(),
        "content": ue.getContentTxt(),
        "category": $("#category").val(),
        "tag" : $("#tag").val(),
        '_xsrf': $("input[name='_xsrf']").val(),
    };
    $.ajax({
        url: '/admin/study/recommend/add',
        type: 'post',
        data: xjson,
        success: function (data) {
            var jsons = jQuery.parseJSON(data);
            alert(jsons.msg);
            if (jsons.status == "ok") {
                location.reload();
            }
        },
        error: function () {
            alert('error');
        }
    });
});

2.後代儲存程式碼

class AdminAddStudyRecommend(BaseHandler):
    """增加學習推薦"""
    @BaseHandler.admin_authed
    def post(self):
        datas = self.request.arguments
        print "Add recommend=>",datas
        info = dict()
        last = self.db.tb_study_recommend.find_one({},{"id":1,"_id":0},sort=[("id", pymongo.DESCENDING)])
        info['id'] = int(last.get("id",0)) + 1 if last else 1
        info['title'] = self.get_argument('title')
        info['brief'] = self.get_argument('brief')
        info['img'] = self.get_argument('image')
        info['content'] = self.get_argument('content')
        info['category'] = self.get_argument('category')
        info['tag'] = self.get_argument('tag',info.get('category'))
        info['status'] = 1

        for k, v in info.iteritems():
            if not v:
                return self.write(json.dumps({"status": 'error', "msg": k + "為必選項,請輸入資訊!"}))

        info["videourl"] = self.get_argument('videourl',"")

        info['userid'] = self.admin['userid']
        info['atime'] = time.strftime("%Y-%m-%d %H:%M:%S")
        self.db.tb_study_recommend.insert(info)

        return self.write(json.dumps({"status": "ok", "msg": u'增加推薦內容成功'}))

相關推薦

前端元件Plupload使用---視訊(分片)

上傳視訊到伺服器 1.引入js外掛: <script type="text/javascript" src="{{ static_url('plupload/js/plupload.full.min.js') }}"></script> 2.ht

前端元件Plupload使用---視訊

上傳視訊到伺服器 1.引入js外掛: <script type="text/javascript" src="{{ static_url('plupload/js/plupload.full.min.js') }}"></script> 2.ht

前端元件Plupload使用指南 與swfupload一樣強大

Plupload是一款由著名的web編輯器TinyMCE團隊開發的上傳元件,簡單易用且功能強大,我們完全可以使用Plupload來代替以前的SWFUpload。 Plupload有以下功能和特點: 1、擁有多種上傳方式:HTML5、flash、silverlight以及傳統

在瀏覽器進行檔案分片(java服務端實現)

最近在做web網盤的系統,網盤最基本的功能便是檔案上傳,但是檔案上傳當遇到大檔案的時候,在web端按傳統方式上傳簡直是災難,所以大檔案上傳可以採用分片上傳的辦法。其主要思路是:1.大檔案上傳時進行分片;2.分片上傳;3.對分片檔案進行合併。 思路比較清晰簡單,但一些問題在於:1.大檔案如何進

PHP檔案分片的實現方法

一、前言 在網站開發中,經常會有上傳檔案的需求,有的檔案size太大直接上傳,經常會導致上傳過程中耗時太久,大量佔用頻寬資源,因此有了分片上傳。 分片上傳主要是前端將一個較大的檔案分成等分的幾片,標識當前分片是第幾片和總共幾片,待所有的分片均上傳成功的時候,在後臺進行合成檔案即可。 二、

網頁內實現檔案分片、斷點續

最近做公司的專案,需要在後臺控制系統中新增一個功能-------向伺服器傳送程式更新包;這些程式更新包大小不固定,但基本都在1G到4G之間,剛開始還真是難倒我了,因為之前的專案中沒有上傳過這麼大的檔案,還要斷點續傳,後來經過查資料,寫DEMO,這個問題終於解決了; 解決辦法: 使用XMLHt

java springboot 檔案分片處理

這裡只寫後端的程式碼,基本的思想就是,前端將檔案分片,然後每次訪問上傳介面的時候,向後端傳入引數:當前為第幾塊問價,和分片總數 下面直接貼程式碼吧,一些難懂的我大部分都加上註釋了: 上傳檔案實體類: /** * 檔案傳輸物件 * @ApiModel和@ApiModelProperty及C

eggJS檔案分片與合併

前臺上傳使用vue+axios 前臺程式碼: // 計算分片總數 for (let i = 0; i < Math.ceil(this.file.size / this.uploadFragment.fragment); i++) { this.uploadFra

php檔案分片

HTML <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="widt

前段WebUploader;JavaEE檔案分片接收

Web大檔案分片上傳 Web環境中大檔案上傳不能再用form表單一次上傳了,這樣效率太低; 我在不斷嘗試SpringMVC環境下分片接受檔案,最終失敗;原因目測是 SpringMVC、Struts框架是不支援HTML5方式上傳的(這類框架只能支援Form表單

iOS檔案分片和斷點續

總結一下大檔案分片上傳和斷點續傳的問題。因為檔案過大(比如1G以上),必須要考慮上傳過程網路中斷的情況。http的網路請求中本身就已經具備了分片上傳功能,當傳輸的檔案比較大時,http協議自動會將檔案切片(分塊),但這不是我們現在說的重點,我們要做的事是保證在網路中斷後1G

分片 多執行緒檔案(接收端)

package com.controller; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.RandomAccessFile; i

Android 檔案分片斷點續任務管理實現

Transer 是一個傳輸框架,目前支援: - 支援 HTTP/HTTPS 斷點續傳下載 - 支援 HTTP/HTTPS 大檔案分片上傳 - 支援 類EventBus的task狀態變更通知,支援三種執行緒的訂閱模式 - 支援 任務分組,分使用者

js實現檔案分片的方法

<input type="file" name="file" id="file"> <button id="upload" onClick="upload()">upload</button>var bytesPerPiece = 1024

webuploader在springMVC+jquery+Java開發環境下的檔案分片

參考的文章http://blog.csdn.net/new_sara/article/details/51604997 因為從網上看到的總是和自己專案開發有些許差別,所以也是在除錯了很久之後,發現適合自己專案的程式碼,現在把過程記錄下來,以便以後查閱. 注意: 1,web

Node + js實現檔案分片基本原理及實踐(一)

閱讀目錄 一:什麼是分片上傳? 二:理解Blob物件中的slice方法對檔案進行分割及其他知識點 三. 使用 spark-md5 生成 md5檔案 四. 使用koa+js實現大檔案分片上傳實踐 回到頂部 一:什麼是分片上傳? 分片上傳是把一個大的檔案分成若干塊,一塊一塊的傳輸。這

nodeJs + js 檔案分片

簡單的檔案上傳 一、準備檔案上傳的條件: 1、安裝nodejs環境 2、安裝vue環境 3、驗證環境是否安裝成功 二、實現上傳步驟 1、前端部分使用 vue-cli 腳手架,搭建一個 demo 版本,能夠實現簡單互動: <template> <div id="app">

.NET Core Web APi檔案分片研究

前言 前兩天發表利用FormData進行檔案上傳,然後有人問要是大檔案幾個G上傳怎麼搞,常見的不就是分片再搞下斷點續傳,動動手差不多也能搞出來,只不過要深入的話,考慮的東西還是很多。由於斷點續傳之前寫個幾篇,這裡試試利用FormData來進行分片上傳。 .NET Core Web APi檔案分片上傳 這裡我們

前端元件WebUploader檔案與Python結合的實現

Python實現大檔案分片上傳 引言 想借著這篇文章簡要談談WebUploader大檔案上傳與Python結合的實現。 WebUploader是百度團隊對大檔案上傳的前端實現,而後端需要根據不同的語言自己實現。這裡我採用Python語言的Flask框架搭建後端,

js分片文件,前端代碼

asc 代碼 firmware ceil 發送 內存 ref war 上傳文件 首先導入jQuery.form.js文件,下面src是相對於改js文件位置, <script type="text/JavaScript" src="jquery/jquery-form.