UNPKG

unserver-unify

Version:

390 lines (387 loc) 13 kB
'use strict'; angular.module('bamboo').controller('alicloudUploadCtrl', function($scope, $sce, $location, $timeout, $uibModal, setting, $uibModalInstance, FileUploader, ApiService, LocalConfig, $window, $rootScope) { var self = this; self.errmsg = ''; $scope.setting = setting; $scope.validupload = true; var lookupFound=false; var lookupFile=setting.lookupFile; var directory; var url = '//' + LocalConfig.OSSSERVER + '/resupload'; if(LocalConfig.OSSSERVER.charAt(0)=='/'){ url=LocalConfig.OSSSERVER+'/resupload'; } var _protocol = window.location.protocol; if(setting.apiUrl){ var url = '//' + LocalConfig.OSSSERVER + setting.apiUrl; if(LocalConfig.OSSSERVER.charAt(0)=='/'){ url=LocalConfig.OSSSERVER+setting.apiUrl; } }else if (_protocol.indexOf('https') > -1) { this.allowmedia = true; if (LocalConfig.HTTPSFILESERVER) { url = LocalConfig.HTTPSFILESERVER + '/resupload'; } } else if ($location.host().indexOf('localhost') > -1) { this.allowmedia = true; } var filenumbers = 0; var selectedFileName; var uploader = $scope.uploader = new FileUploader({ url: url, // queueLimit: 10, // withCredentials: true }); var _info = { action: setting.action, path: setting.resPath, }; if (setting.randomFlag) { _info.random = setting.randomFlag; } if (setting.multiple) { _info.multiple = true; } if(setting.directory){ _info.directory = true; } if (setting.id) { _info.id = setting.id; } if (setting.srtConvert) { _info.convert = 'srt2vtt'; } uploader.formData.push(_info); $scope.nameDurations = {}; $scope.nameBitRate = {}; this._selectedMultifile = function(files) { console.log(files); } $scope.config = { preload: "none", sources: [{ //src: $sce.trustAsResourceUrl("http://static.videogular.com/assets/videos/videogular.mp4"), src: null, type: "video/mp4" }], tracks: [{ //src: "http://www.videogular.com/assets/subs/pale-blue-dot.vtt", kind: "subtitles", srclang: "en", label: "English", default: "" }], theme: { url: "http://www.videogular.com/styles/themes/default/latest/videogular.css" } }; function dataURLtoBlob(dataurl, filename) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n); } var blob = new Blob([u8arr], { type: mime }); blob.name = filename; blob.lastModifiedDate = new Date(); return blob; } function handleCompressedImage() { // $scope.validupload = false; if (!self.imageobj) { $timeout(handleCompressedImage, 200) return; } // console.log(self.imageobj); var filename = (new Date()).getTime().toString() + ".jpg"; var data = self.imageobj.compressed.dataURL; var tempfile = dataURLtoBlob(data, filename); console.log(tempfile); var files = [tempfile]; uploader.addToQueue(files); // $scope.selectedFile =tempfile; // $scope.selectedFile=self.imageobj.compressed.dataURL; // $scope.selectedFile.duration = null; // set null duration to single no-mp4 file // $scope.validupload = true; // enable the upload button for othe format } $scope.imageUploaded = function() { console.log("--- uploaded ---"); self.imageobj = null; // console.log(self.imageobj); handleCompressedImage(); } $scope.convertSrt = function() {} this.remove = function(index) { uploader.removeFromQueue(index); } uploader.onAfterAddingFile = function(fileItem) { self.previewVideoSrc = null; self.needConvert = false; self.currentFile = fileItem.file; console.log("file updated"); // console.log(fileItem); if (!setting.multiple && uploader.queue.length > 1) { // if only single upload var _temp = uploader.queue[uploader.queue.length - 1]; uploader.queue = []; uploader.queue.push(_temp); } // check if we need to show thumb (only for img file) if (fileItem.file.type.indexOf("image") != -1) { fileItem.file.isImage = true; } //check file size if (fileItem.file.size > setting.maxSize * 1024) { self.errmsg = fileItem.file.name + ' size : ' + fileItem.file.size + ' > ' + setting.maxSize + 'KB'; var msg = fileItem.file.name + ' size : ' + fileItem.file.size + ' > ' + setting.maxSize + 'KB'; fileItem.errmsg = msg; }else{ fileItem.errmsg = ""; } //find the duration for mp4 file, and also set duration to null for no-mp4 file var _filename = fileItem._file.name; var _ext = _filename.split('.'); var _extl = _ext[_ext.length - 1]; // console.log(_extl); if (_extl == 'mp4' || _extl == "webm") { var previewImageSrc = URL.createObjectURL(fileItem._file); var video = document.createElement('video'); video.src = previewImageSrc; video.preload = 'metadata'; video.name = fileItem._file.name; // event will triggered when meta data was loaded video.onloadedmetadata = function() { // console.log(this.duration); // console.log(this.videoHeight); // console.log(fileItem.file.size); $scope.nameDurations[this.name] = this.duration; $scope.nameBitRate[this.name] = false; if (this.duration) { var bitrate = fileItem.file.size / this.duration; if (bitrate > 150000) { console.log(bitrate); $scope.nameBitRate[this.name] = true; } } if (!$scope.$$phase) { $scope.$apply(); } }; if (!setting.multiple) { //self.previewVideoSrc = $sce.trustAsResourceUrl(previewImageSrc); self.previewVideoSrc = $sce.trustAsResourceUrl(previewImageSrc); console.log(fileItem._file); $scope.config.sources[0].src = URL.createObjectURL(fileItem._file); } } else { // console.log("--- convert needed ---"); // console.log(fileItem); if (setting.accept == '.mp4') { console.log("--- convert needed ---"); self.needConvert = true; } self.oldFileName = fileItem._file.name; } if (uploader.queue.length > 1 && !setting.multiple) { uploader.removeFromQueue(0); } else if (setting.directory) { // console.log(uploader.queue); // console.log(fileItem._file); var files = fileItem._file; // console.log(files.webkitRelativePath); var fullpath = files.webkitRelativePath; // console.log(files.name); if(lookupFile&&lookupFile.indexOf(files.name)>-1){ console.log('-- lookup found --'); lookupFound=true; } var refname = '/' + files.name; var pos = fullpath.indexOf(refname); var _directory = fullpath.substring(0, pos); var _directory = _directory.split(' ').join("_"); // console.log(_directory); if (uploader.queue.length == 1) { directory = _directory; } var index = uploader.queue.length; // console.log(uploader.queue[index - 1].formData[0].path); uploader.queue[index - 1].formData[0].path = uploader.queue[index - 1].formData[0].path + _directory + "/"; // console.log(uploader.queue[index - 1].formData[0].path); } filenumbers = uploader.queue.length; selectedFileName = uploader.queue[0].file.name; }; if ($scope.setting.selectedFile) { // load file from setting if available uploader.addToQueue($scope.setting.selectedFile); } this.convertMp4 = function() { if (!setting.id && setting.idcallback) { setting.idcallback(self.currentFile.name, function(result) { console.log(result); var id = result._id; $scope.setting.id = id; _convertmp4(id); }) } else { _convertmp4(setting.id); } } function _convertmp4(id) { // console.log(uploader); var url = '//' + LocalConfig.OSSSERVER + '/mp4convert'; if(LocalConfig.OSSSERVER.charAt(0)=='/'){ url=LocalConfig.OSSSERVER+'/mp4convert'; } if (LocalConfig.HTTPSFILESERVER) { url = LocalConfig.HTTPSFILESERVER + '/mp4convert'; } uploader.url = url; for (var i = 0; i < uploader.queue.length; i++) { var item = uploader.queue[i]; item.url = url; item.formData[0].id = id; } console.log(uploader); uploader.uploadAll(); } var filedone = 0; var filelist = []; var failed = []; uploader.onCompleteItem = function(item, response) { console.log(response); if (!response) { return; } if (response.success) { filedone++; var info = { result: response.fileName, source: response.originame, filesize: item.file.size, // return file size for successfully uploaded file, NOTICED, this API name must be aligned along other uploaders duration: $scope.nameDurations[item.file.name] || null // return duration, MUST be the same API as others uplaoder }; filelist.push(info); if (filedone >= filenumbers) { // console.log("return here"); var _info = { result: true, message: 'Update Successful!', list: response.list, directory: directory, pass: filelist, fileName: response.fileName, source: response.originame, origin: selectedFileName, dataresult:response.result, lookupFound:lookupFound, } if (self.needConvert) { console.log("--- need convert ? ---"); _info.source = self.oldFileName; _info.convertFlag = true; _info.rid = $scope.setting.id; } console.log(info); $uibModalInstance.close(_info); } } else { if (!item.resent) { item.resent = true; item.upload(); } else { filedone++; failed.push(item.file.name); if (filedone >= filenumbers) { $uibModalInstance.close({ result: filelist.length > 0 ? true : false, message: response.error, pass: filelist, fail: failed }); } else { // do nothing as it doesn't finish upload all } } } }; uploader.onProgressItem = function(item, progress) { $rootScope.$storage.idleTime = 0; //keep resetting the timeout counter when uploader is working if (setting.convertFlag) { if (progress > 95) { $scope.convertflag = true; } } //console.log(progress); //console.log(item); }; $scope.recordvoice = function() { console.log(" record ---"); var r = $uibModal.open({ templateUrl: 'components/upload/audio_dialog.html', controller: 'AudioRecordCtrl', controllerAs: 'ctrl', backdrop: 'static', }).result; r.then(function(data) { if (data.result) { var url = '//' + LocalConfig.OSSSERVER + '/mp3convert'; if(LocalConfig.OSSSERVER.charAt(0)=='/'){ url=LocalConfig.OSSSERVER+'/mp3convert'; } if (LocalConfig.HTTPSFILESERVER) { url = LocalConfig.HTTPSFILESERVER + '/mp3convert'; } //console.log(data.file); // uploader.formData[0].path=""; // uploader uploader.url=url; uploader.formData[0].directUpload=true; uploader.addToQueue(data.file); //console.log(uploader); uploader.uploadAll(); console.log(uploader); //$scope.uploadS3File(data.file); } }); }; $scope.recordvideo = function() { var r = $uibModal.open({ templateUrl: 'components/upload/video_dialog.html', controller: 'VideoRecordCtrl', controllerAs: 'ctrl', backdrop: 'static', }).result; r.then(function(data) { if (data.result) { // uploader.formData[0].path=""; uploader.formData[0].directUpload=true; uploader.addToQueue(data.file); console.log(uploader); _convertmp4(); // uploader.uploadAll(); } }); }; $scope.shootPhoto = function() { var r = $uibModal.open({ templateUrl: 'components/upload/photo_dialog.html', controller: 'PhotoShootCtrl', controllerAs: 'ctrl', backdrop: 'static', }).result; r.then(function(data) { if (data.result) { uploader.addToQueue(data.file); uploader.uploadAll(); } }); }; $scope.dismiss = function() { $scope.uploader.cancelAll(); $uibModalInstance.dismiss(); } });