博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angularjs 实现 文件拖拽,缩略图显示
阅读量:7034 次
发布时间:2019-06-28

本文共 11705 字,大约阅读时间需要 39 分钟。

成果图:

 

main-hugeScreen.html

Select files

Base drop zone
Another drop zone with its own settings

Multiple

Single

Queue length: {
{myFile.length}}

Upload queue

缩略图 Name Size Progress Status Actions
{ { item.file.name }} { { item.file.size/1024/1024|number:2 }} MB

Queue progress:

Note: upload.php file included, files will be uploaded to "src/js/controllers/uploads".

缩略图

bjt-imageload-service.js

/** * Created by chaiqiaozhen on 10/6/15. */app.service('fileReader', function ($q) {    var fileReader = this;        fileReader.onLoad = function(file, reader,deferred, scope) {            return function () {                scope.$apply(function () {                    var ret = {                        srcfile: file,                        stream: reader.result                    };                    deferred.resolve(ret);                });            };        };    fileReader.onError = function (reader, deferred, scope) {            return function () {                scope.$apply(function () {                    deferred.reject(reader.result);                });            };        };    fileReader.onProgress = function(reader, scope) {            return function (event) {                scope.$broadcast("fileProgress",                    {                        total: event.total,                        loaded: event.loaded                    });            };        };    fileReader.getReader = function(file,deferred, scope) {            var reader = new FileReader();            reader.onload = fileReader.onLoad(file, reader,deferred, scope);            reader.onerror = fileReader.onError(reader, deferred, scope);            reader.onprogress = fileReader.onProgress(reader, scope);            return reader;        };    fileReader.readMyAsDataURL = function (file, scope) {            var deferred = $q.defer();            var reader = fileReader.getReader(file, deferred, scope);            reader.readAsDataURL(file);            return deferred.promise;        };    });

hugeScreen-service.js

app.directive('fileDropzone', ['$bjtHttpService','fileReader',function($bjtHttpService,fileReader) {    return {        restrict: 'A',        scope: {            files: '=',            overClass: '='        },        link: function(scope, element, attrs) {            var checkSize, isTypeValid, processDragOverOrEnter, validMimeTypes,getDataTransfer,addfile;            var fileList = [];            addfile = function(item){                fileList[fileList.length] = item;            }            getDataTransfer = function(event) {                var dataTransfer;                return dataTransfer = event.dataTransfer || event.originalEvent.dataTransfer;            };            processDragOverOrEnter = function(event) {                if (event != null) {                    event.preventDefault();                }                getDataTransfer(event).effectAllowed = 'copy';                element.addClass(attrs.overClass);              //  console.log(element);                return false;            };            validMimeTypes = attrs.fileDropzone;            checkSize = function(size) {                var _ref;                if (((_ref = attrs.maxFileSize) === (void 0) || _ref === '') || (size / 1024) / 1024 < attrs.maxFileSize) {                    return true;                } else {                    alert("File must be smaller than " + attrs.maxFileSize + " MB");                    return false;                }            };            isTypeValid = function(type) {                if ((validMimeTypes === (void 0) || validMimeTypes === '') || validMimeTypes.indexOf(type) > -1) {                    return true;                } else {                    alert("Invalid file type.  File must be one of following types " + validMimeTypes);                    return false;                }            };            element.bind('dragover', processDragOverOrEnter);            element.bind('dragenter', processDragOverOrEnter);            return element.bind('drop', function(event) {                var files;                if (event != null) {                    event.preventDefault();                }                element.removeClass(attrs.overClass);                fileList = [];                files = getDataTransfer(event).files;                for(var i = 0; i < files.length; i++){                    if(!isTypeValid(files[i].type))                        return false;                    if(!checkSize(files[i].size))                       return false;                  /*  var reader = new FileReader();                    reader.onload = function(reader,evt){                        console.log(reader);                    };                    reader.readAsDataURL(files[i]);*/                  /*  fileReader.readMyAsDataURL(files[i],scope).then(                        function(ret){                            console.log(ret);                    });*/                   fileReader.readMyAsDataURL(files[i], scope)                        .then(function(ret) {                            var file = {                                isSuccess: false,                                isCancel: false,                                isError: false,                                progress: 0,                                isReady: false,                                isUploading: false,                                file: ret.srcfile,                                stream: ret.stream,                                upload: function (item) {                                    var options = {                                        headers: {
'Content-Type': undefined}, callbackError: function(args,data){ item.isError = true; }, callbackSuccess: function(args,data){ item.isSuccess = true; item.progress = 100; console.log(this.isSuccess); } }; var addOptions = { transformRequest: angular.identity }; var fd = new FormData(); fd.append('file', this.file); $bjtHttpService.$post('demo/file/upload',fd,options,addOptions); } }; addfile(file); }); } scope.files = fileList; return false; }); } };}]);app.directive('fileModel', ['$parse', '$bjtHttpService', function ($parse, $bjtHttpService) { return { restrict: 'A', link: function(scope, element, attrs) { var model = $parse(attrs.fileModel); var modelSetter = model.assign; var filelist = []; element.bind('change', function(){ scope.$apply(function(){ for(var i = 0; i < element[0].files.length; i++){ var file = { isSuccess: false, isCancel: false, isError: false, progress: 0, isReady: false, isUploading: false, file: element[0].files[i], fileStream: null, upload: function (item) { var options = { headers: {
'Content-Type': undefined}, callbackError: function(args,data){ item.isError = true; }, callbackSuccess: function(args,data){ item.isSuccess = true; item.progress = 100; console.log(this.isSuccess); } }; var addOptions = { transformRequest: angular.identity }; var fd = new FormData(); fd.append('file', this.file); $bjtHttpService.$post('demo/file/upload',fd,options,addOptions); } }; filelist[i] = file; } modelSetter(scope, filelist); }); }); } };}]);app.controller('HugeScreenCtrl', ['$scope', 'fileReader', function($scope, fileReader) { $scope.allprogress=0; $scope.myFile = ''; $scope.image= null; $scope.imageFileName = ''; $scope.redColorActive = 'false';//'b-danger'; $scope.removeItem = function(index){ $scope.myFile.splice(index, 1); }; $scope.getNotUploadedItems = function () { var files = []; for(var i = 0, j = 0; i < $scope.myFile.length; i++){ if(!$scope.myFile[i].isSuccess) files[j++] = $scope.myFile[i]; } return files; }; $scope.getImage = function(item){ fileReader.readMyAsDataURL(item, $scope) .then(function(result) { return result; }); }; $scope.uploadAllfiles = function(){ $scope.allprogress = 0.0; console.log($scope.allprogress); var percent = 0; if($scope.myFile.length > 0) percent = 100/$scope.myFile.length; console.log(percent); for( var i = 0; i < $scope.myFile.length; i++) { if($scope.myFile[i].isSuccess) $scope.allprogress = $scope.allprogress+ percent; else{ $scope.myFile[i].upload($scope.myFile[i]); if($scope.myFile[i].isSuccess) $scope.allprogress = $scope.allprogress+ percent; } console.log($scope.allprogress); } };}]);

 

转载地址:http://lwnal.baihongyu.com/

你可能感兴趣的文章
mysql慢查询
查看>>
offices文件打开乱码问题如何处理
查看>>
LINUX之旅
查看>>
抓屏程序
查看>>
win7系统64为安装jdk、tomcat
查看>>
many-to-many出现的问题
查看>>
第5章 配置邮箱服务
查看>>
node.js的一个简单框架
查看>>
PPT如何保存还原已剪裁图片的原始版本
查看>>
bada 2D游戏编程之二——图像绘制(2)
查看>>
2012年度IT博客大赛50强报道:桂素伟
查看>>
女程序员的职业规划
查看>>
我的友情链接
查看>>
ExchangeApplicationPool意外停止--OWA異常
查看>>
System Center Data Protection Manager 2010 部署指南
查看>>
Tomcat指定(JDK路径)JAVA_HOME而不用环境变量
查看>>
python+selenium+PIL+tesseract验证码识别
查看>>
请教一个问题:关于 webrtc 通信的问题
查看>>
xtrabackup自动还原v2
查看>>
偶遇问题之ORA-07445 ORA-00108 报错处理
查看>>