通过AngularJS实现图片上传及缩略图展示(读取文件内容)

AngularJS图片上传功能的实现(读取文件内容)

AngularJs实现Multipart/form-data 文件的上传(上传文件对象到后端)

//添加页面元素

<div style="clear:both;">
<img ng-src="{{imageSrc}}" class="image"/>
</div>
<div style="clear:both;">
<button class="file uploadLogo">
<input type="file" accept="image/jpeg" hosfile-model="myFile"/>
</button>
</div>

//添加页面对应的attribute directive

hospitalControllers.directive('hosfileModel', ['$parse', function ($parse) {
return {
restrict: 'A',
link: function(scope, element, attrs, ngModel) {
var model = $parse(attrs.hosfileModel);
var modelSetter = model.assign;
element.bind('change', function(event){
scope.$apply(function(){
modelSetter(scope, element[0].files[0]);
});
//附件预览
scope.file = (event.srcElement || event.target).files;//[0]
scope.getFile();
});
}
};

//controller里上传图片方法
$scope.getFile = function () {
console.log("file: " + JSON.stringify($scope.file));
if(/\.(jpg|jpeg)$/i.test($scope.file[0].name) && ($scope.file[0].size/1024) < 1024){
//读取图片内容显示在页面
fileReaderInHospital.readAsDataUrl($scope.file[0], $scope)
.then(function(result) {
console.log("image result: " + result);
$scope.imageSrc = result;
});

//上传LOGO图片
var fd = new FormData();
angular.forEach($scope.file,function(file){
fd.append('file',file);
})
$http({
method : 'POST',
url : '/imageserver/images',
data: fd,
headers:{
'Content-Type': undefined
},
transformRequest: angular.identity
})
.success(function(data, status, headers, config) {
if(status == 201){
console.log("上传LOGO图片成功");
//截取最后的图片uuid
var location = headers("Location");
var uuid = location.split("/").pop();
$scope.imageUuid = uuid;
console.log("image uuid: " + $scope.imageUuid);
}else{
Message.alert({
msg: '上传LOGO图片失败',
title: '上传LOGO图片',
btnok: '确定',
btncl:'取消'
});
}

})
.error(function(data, status, headers, config) {
Message.alert({
msg: '上传LOGO图片失败',
title: '上传LOGO图片',
btnok: '确定',
btncl:'取消'
});
});
}else{
$scope.imageSrc = "";
Message.alert({
msg: "LOGO只能是JPG或JPEG格式,不得超过1M!",
title:"上传失败提示",
btnok: '确定',
btncl:'取消'
});
}
};

//service

hospitalService.factory('fileReaderInHospital', ['$q', '$log', function($q, $log){
var onLoad = function(reader, deferred, scope) {
return function () {
scope.$apply(function () {
deferred.resolve(reader.result);
});
};
};

var onError = function (reader, deferred, scope) {
return function () {
scope.$apply(function () {
deferred.reject(reader.result);
});
};
};

var getReader = function(deferred, scope) {
var reader = new FileReader();
reader.onload = onLoad(reader, deferred, scope);
reader.onerror = onError(reader, deferred, scope);
return reader;
};

var readAsDataURL = function (file, scope) {
var deferred = $q.defer();
var reader = getReader(deferred, scope);
reader.readAsDataURL(file);
return deferred.promise;
};

return {
readAsDataUrl: readAsDataURL
};
}]);

angularjs上传图片的更多相关文章

  1. angularjs上传图片插件使用

    一. angurlajs 相关 远程 jar 包 https://code.angularjs.org/angular-1.0.1.min.js 二. 正文 1. html 部分 <!-- 需要 ...

  2. 三、angularjs上传图片

    上传图片需要引入插件ngFileUpload,使用bower安装方法: bower install ng-file-upload --save,安装后需要在命名app的名字js文件中注入,如下所示: ...

  3. angularjs上传图片和文件

    很简单: $scope.upload = function() { var f = $scope.myFile; var fd = new FormData(); var img = document ...

  4. angularJs中上传图片/文件功能:ng-file-upload

    原文技术交流:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/angularjs-ng-file-upload/ 在做网站的过程中难 ...

  5. ZH奶酪:AngularJS/JavaScript上传图片【PC端】

    [功能介绍] 类似与修改个人信息的时候,点击头像,就可以完成选择照片.上传照片等步骤达到替换头像的目的. [运行流程] (1)点击头像 (2)选择头像 (3)点击“完成”,上传头像 1.HTML图片部 ...

  6. ZH奶酪:ionic+angularJS+cordova(FileTransfer)上传图片【移动端】

    [功能介绍] 在开发应用的时候,经常会遇到需要上传图片的功能,比如修改个人资料的头像.本文介绍的是基于ionic框架,在移动端上传图片的功能. [功能流程] (1)点击页面上的头像,弹出一个对话框,选 ...

  7. angularjs input上传图片前获取图片的Size

    首先我们需要一个指令来追踪input的change.ngChage不适用input[file]. app.directive("fileread", [function () { ...

  8. Angularjs在线编辑器

    1.TextAngular: https://github.com/fraywing/textAngular textAngular是一个强大的Text-Editor/Wysiwyg 编辑器,用于An ...

  9. Angularjs web应用

    构建兼容浏览器的Angularjs web应用 背景 随着mvvm逐渐成熟,现在使用jQuery构建web应用已经显得过时了,而且使用jQuery需要编写更多的代码去控制dom的取值.赋值.绑定事件等 ...

随机推荐

  1. .Net Office开源组件

    1.NPOI NPOI 是 POI 项目的 .NET 版本.POI是一个开源的Java读写Excel.WORD等微软OLE2组件文档的项目.使用 NPOI 你就可以在没有安装 Office 或者相应环 ...

  2. 跟我学Windows Azure 三 使用vs2013创建windows azure web site

    首先我们需要登陆我们的windows azure上,然后访问 https://manage.windowsazure.cn/publishsettings/index 他会让我们下载我们的订阅证书文件 ...

  3. XMLHttpRequest

    XMLHttpRequest对象的方法 abort() 取消当前所发出的请求 getAllResponseHeaders() 取得所有的HTTP头信息 getResponseHeader() 取得一个 ...

  4. (zhuan) Deep Reinforcement Learning Papers

    Deep Reinforcement Learning Papers A list of recent papers regarding deep reinforcement learning. Th ...

  5. Python非阻塞网络通信Howto

    在Python中,你使用socket.setblocking(0)使它无阻塞.在C中,它更复杂,(一方面,你需要在BSD风格O_NONBLOCK和几乎不可区分的Posix风味O_NDELAY之间进行选 ...

  6. sqlalchemy数据模型

    sqlalchemy在python里作为orm还是比较有名气的,以下是建立的几个简单模型,完全可和flask的数据持久层分离. # coding: utf8 from sqlalchemy impor ...

  7. delphi中的各种文件类型介绍【转】

    1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...

  8. SetForegroundWindow激活窗口

    在Window98以下,如果程序要激活自己,只需要简单的调用SetForegroundWindow即可达到目的.但到Win98以后,再也没有这么简单了. 新建一个简单的工程,加进一个Timer控件,设 ...

  9. ubuntu修改主机名

    ubuntu修改主机名   主机名在/etc/hostname文件中了,只在打开这个文件进行修改,重启计算机即可.     一.查看主机名 $ hostname  #查看主机名 cdyemail   ...

  10. DELL_LCD错误提示代码

    代码 文本 原因E1000 Failsafe voltage error. Contact support.(故障保护电压错误.请联络支持人员.) 查看系统事件记录以了解严重故障事件.E1114 Am ...