/** * https://github.com/juliomalegria/django-chunked-upload */ $(function () { var md5 = "", lastprogress = 0, csrf = $("input[name='csrfmiddlewaretoken']")[0].value, form_data = [{"name": "csrfmiddlewaretoken", "value": csrf}]; function calculate_md5(file, chunk_size) { var slice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, chunks = chunks = Math.ceil(file.size / chunk_size), current_chunk = 0, spark = new SparkMD5.ArrayBuffer(); function onload(e) { spark.append(e.target.result); // append chunk current_chunk++; if (current_chunk < chunks) { read_next_chunk(); } else { md5 = spark.end(); } }; function read_next_chunk() { var reader = new FileReader(); reader.onload = onload; var start = current_chunk * chunk_size, end = Math.min(start + chunk_size, file.size); reader.readAsArrayBuffer(slice.call(file, start, end)); }; read_next_chunk(); } $("#chunked_upload").fileupload({ url: api_chunked_uplad, dataType: "json", maxChunkSize: 100000, // Chunks of 100 kB formData: form_data, add: function(e, data) { // Called before starting upload var fileSize = data.originalFiles[0]['size']; var type = data.originalFiles[0]['type']; console.log('file size --> ' + fileSize); console.log('type --> ' + type); if(fileSize > 100000000){ alert('文件太大了,请上传100M以内的文件'); return; } if(!type.startsWith("video/")){ alert('视频格式不正确'); return; } // If this is the second file you're uploading we need to remove the // old upload_id and just keep the csrftoken (which is always first). form_data.splice(1); calculate_md5(data.files[0], 100000); // Again, chunks of 100 kB data.submit(); $('#progress_label').on('click', false); $('#progress_layout').show() }, chunkdone: function (e, data) { // Called after uploading each chunk if (form_data.length < 2) { form_data.push( {"name": "upload_id", "value": data.result.upload_id} ); } var progress = parseInt(data.loaded / data.total * 100.0, 10); console.log(progress); if(progress > lastprogress){ lastprogress = progress $('#upload_progress').progress({ percent: progress }); } }, done: function (e, data) { // Called when the file has completely uploaded $.ajax({ type: "POST", url: api_chunked_upload_complete, data: { csrfmiddlewaretoken: csrf, upload_id: data.result.upload_id, md5: md5 }, dataType: "json", success: function(data) { console.log(data) $('#upload_label').text('上传成功'); $('#upload_progress').progress({ percent: 100 }); $('#next_layout').show(); $('#next').click(function(){ window.location = '/myadmin/video_publish/' + data.video_id }); } }); }, }); })