Angularjs+Nodejs图片上传

1.插件

  (1) :angular插件 ng-file-upload

  (2) : nodejs插件connect-multiparty

 

2.html

<input type="file"  ngf-select ng-model="files" ngf-multiple="true" />

3.配置

var app = angular.module('fileUpload', ['ngFileUpload']);
可以参考https://github.com/danialfarid/ng-file-upload
 1 //inject angular file upload directives and services.
 2 var app = angular.module('fileUpload', ['ngFileUpload']);
 3 
 4 app.controller('MyCtrl', ['$scope', 'Upload', function ($scope, Upload) {
 5     $scope.$watch('files', function () {
 6         $scope.upload($scope.files);
 7     });
 8     // set default directive values
 9     // Upload.setDefaults( {ngf-keep:false ngf-accept:'image/*', ...} );
10     $scope.upload = function (files) {
11         if (files && files.length) {
12             for (var i = 0; i < files.length; i++) {
13                 var file = files[i];
14                 Upload.upload({
15                     url: 'url',   //此处url为向后台nodejs请求的路由
16                     fields: {'username': $scope.username},
17                     file: file
18                 }).progress(function (evt) {
19                     var progressPercentage = parseInt(100.0 * evt.loaded / evt.total);
20                     console.log('progress: ' + progressPercentage + '% ' + evt.config.file.name);
21                 }).success(function (data, status, headers, config) {
22                     console.log('file ' + config.file.name + 'uploaded. Response: ' + data);
23                 }).error(function (data, status, headers, config) {
24                     console.log('error status: ' + status);
25                 })
26             }
27         }
28     };
29 }]);

 

4.nodejs

后台接收的数据是存在于临时文件夹内。因此使用fs.rename()有肯能会报错。(我这边是确确实实报错了)

 1 var multipart = require('connect-multiparty');
 2 var fs = require('fs');
 3 var multipartMiddleware = multipart();
 4 
 5 
 6 
 7 
 8 
 9 
10   //此处'/url'应与angular发送的路由一致,
11   router.post('/url', multipartMiddleware,function(req, res, next){
12         
13      var profile_image = req.files.file;
14      var tmp_path = profile_image.path;  //此处为页面图片存放的地址,在C盘的临时文件夹temp下。   
15      console.log(req.files);
16      var path = './url' + profile_image.name;  //此处'./url'为上传的图片希望存放的地址.可以为绝对地址
17           
18             //跨域传递文件
19             var is = fs.createReadStream(tmp_path);
20             var os = fs.createWriteStream(path);
21                 is.pipe(os);
22                 is.on('end',function() {
23                     fs.unlinkSync(tmp_path);
24                 });
25             //跨域传递文件
26        //-----------此处可以写点传递回前台的数据   --------此处不完整,不能完全照搬。如果写全的话,太麻烦。
27   });

 

     从最开始的不懂,到后面逐渐把坑填满,花费了太多时间。里面的坑着实不少,能走通一次后,回头再看,代码量就那么点。写一下我犯过的错误吧.

    1.插件版本错误。之前的插件貌似叫做angular-file-upload.悲催的我拿着ng-file-upload,却用angular-file-upload的写法。

    2.angular-file-upload需要在用到的congtroller加载'$upload',而ng-file-upload加载'Upload'.

    3.angular-file-upload加载中间件的名称是['angularFileUpload'],而ng-file-upload加载['ngFileUpload']

    4.nodejs接收不到 req.files.file.一个原因是nodejs插件选择有问题,还有一个原因是插件的写法有问题.个人倾向于使用connect-multiparty.

    5.nodejs的fs.rename()方法报错。猜测:因为上传的图片存在于C盘的临时文件夹内,可能涉及到系统权限的问题导致fs.rename()方法报错。所以,从网上搜了一个跨域读取文件的方法。

 

转载于:https://www.cnblogs.com/maduar/p/4700683.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574404.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步

Mysql互为主从问题--日志同步数据不同步我搭建的是mysql互为主从 复制两台机器的mysql环境完全相同第一部分测试&#xff1a;B为master A为slave的同步测试在B上创建表lian&#xff0c;并插入数据mysql> create table lian (a int,b char(10));mysql> insert into lian (…

UVALive 4764 dp

DES: 这是一个新的游戏。给你一套牌、编号从1到100000.正常来说。你手中的牌和这次翻的牌是一样的&#xff0c;就会加一分。但是。如果是999的话。加三分。所以问你最大的分是多少。 貌似是简单的DP吧。&#xff08;DP菜鸟...再简单我也不会...T_T...&#xff09;于是...我看懂…

mysql数据库事务命令_MySql学习18----数据库事务---命令使用(02)

本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作。下一篇会讲述如何使用JDBC进行数据库的事务操作。事务是指数据库中的一组逻辑操作&#xff0c;这个操作的特点就是在该组逻辑中&#xff0c;所有的操作要么全部成功&#xff0c;要么全部失…

iOS 高效 Mac 配置

https://testerhome.com/topics/3045 https://support.apple.com/zh-cn/HT201236转载于:https://www.cnblogs.com/mobilefeng/p/4701469.html

壁式框架内力计算_剪力墙结构设计计算要点和实例

剪力墙计算第5章剪力墙结构设计本章主要内容&#xff1a;5.1概述结构布置剪力墙的分类剪力墙的分析方法5.2整体剪力墙和整体小开口剪力墙的计算整体剪力墙的计算整体小开口剪力墙的计算5.3联肢剪力墙的计算双肢剪力墙的计算多肢墙的计算5.4壁式框架的计算计算简图内力计算位移的…

Linux删除文件夹命令

Linux删除文件夹命令 linux删除目录很简单&#xff0c;很多人还是习惯用rmdir&#xff0c;不过一旦目录非空&#xff0c;就陷入深深的苦恼之中&#xff0c;现在使用rm -rf命令即可。直接rm就可以了&#xff0c;不过要加两个参数-rf 即&#xff1a;rm -rf 目录名字 删除目录、文…

concat合并的数组会有顺序么_javascript concat 数组与数组或数组与字符串的合并

concat 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.concat()基本语法&#xff1a;array.concat(value1, value2, ..., valueN)concat()参数说明&#xff1a;参数名参数说明array原数组value1, value2, ..., valueN需要与原数组合并的数组或非数组值.conca…

C#调用mciSendString播放音频文件

mciSendString函数是一个WinAPI&#xff0c;主要用来向MCI&#xff08;Media Control Interface&#xff09;设备发送字符串命令。 一、函数的声明如下&#xff1a; private static extern long mciSendString(string command, //MCI命令字符串string returnString, //存放…

mysql 存json中文乱码怎么设置_json接口插入数据库中文乱码

现象&#xff1a;1. 数据库中文乱码控制台显示中文乱码加载的日志2016-08-28 16:00:42,894 org.nutz.dao.impl.DaoSupport$1.invoke(DaoSupport.java:174) DEBUG - JDBC URL --> jdbc:mysql://139.129.118.219:13306/CloudServer2016-08-28 16:00:42,989 org.nutz.dao.impl.…

[转]进程间通信 - ipcrm

ipcrm 命令删除一个或更多的消息队列、信号量集或者共享内存标识。 简介 ipcrm [ -M key | -m id | -Q key | -q id | -S key | -s id ] ... 错误的用法 ipcrm {shm|msg|sem} id... 1.使用说明 ipcrm -M shmkey 移除用shmkey创建的共享内存段 ipcrm -m shmid 移除用shmid标…

python批量修改文件名为excel中指定名称_在Python脚本的帮助下,使用excelsh中的名称映射重命名文件夹中的文件名...

在一个文件夹中有许多CSV文件我想重命名。有一个excel工作表&#xff0c;其中包含要重命名为文件夹的文件名。在文件夹中的文件名为测试数据&#xff1f;30四月.csv在测试数据&#xff1f;20四月.csv在测试数据18四月.csv等等而excel工作表包含的名称为0.25-测试数据4月30日0.9…

sequelize连接mysql_Sequelize没有连接mysql

文件config / config.json{"development": {"username": "root","password": null,"database": "example","host": "example.sqlite","dialect": "sqlite"},"stage…

java开发微信公众平台备忘

简单记录下前段时间开发的电子书的 公众平台的一些备忘及开发心得经验等 eclipse的一些技巧: 1.ctrlshifto 自动添加必要import空间及移除无用import 项目备忘说明 1.struts配置 :resources->struts.xml 经验心得: 1.struts在前台显示后台属性&#xff1a;${属性名称}&#…

java初级程序员_为什么现在JAVA初级程序员要求这么高?

为什么现在JAVA初级程序员要求这么高&#xff1f;举个例子&#xff0c;在90年代&#xff0c;我们吃的是什么&#xff1f;有像现在每天没肉吃就吃不下饭的时候吗&#xff1f;那在90年代我们的编程技术又是什么样的&#xff1f;是不是垃圾的再垃圾不过了&#xff1f;那时候是不是…

html5晋级之路-css背景

css背景&#xff1a; css允许应用纯色作为背景&#xff0c;也允许使用图片来创建相当复杂的效果。 background-attachment 背景图像书否固定或随页面的其余部分滚动 background-color 设置元素的背景颜色 background-image 把…

java word在线预览_java 生成word文档并且在线预览的问题

富文本&#xff1f;用iText或者PD4ML直接转换为pdf[code"java"]String outputFile "D:/Test/demo_3.pdf";OutputStream os new FileOutputStream(outputFile);ITextRenderer renderer new ITextRenderer();ITextFontResolver fontResolver renderer.ge…

java中引用

谈论Java肯定离不开其中的垃圾回收机制&#xff0c;无论是通过引用计数算法判断对象的引用数量&#xff0c;还是通过根搜索算法判断对象的引用链是否可达&#xff0c;判断对象是否存活都与“引用”有关。 在JDK1.2之前&#xff0c;Java中引用的定义很传统&#xff1a;如果refer…

SQL SERVER 2014 各个版本支持的功能

转自&#xff1a;https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称EnterpriseBusiness IntelligenceStandardWebExpress with Advanced ServicesExpress with ToolsExpress单个实例使用的最大计算能力&#xff08;SQL Server 数据库引擎&#xff09;1操…

关于src和background

今天想修改imageview的src里的图片时&#xff0c;发现居然没有setSrcResource方法&#xff0c;但是setBackGroundResource肯定不行啊。 后来找了好几遍&#xff0c;其实与src对应的就是 setImageResource方法。以后别忘记了哦。转载于:https://www.cnblogs.com/heartstong/p/47…

java 线程只执行一次_java – 如何确保方法只执行一次并且只从一个线程执行?...

ShayHaned的解决方案使用锁定.您可以通过AtomicBoolean使其更高效,如&#xff1a;AtomicBoolean wasRun new AtomicBoolean(false);CountDownLatch initCompleteLatch new CountDownLatch(1);public void initialize() {if (!wasRun.getAndSet(true)) {List metadata getMet…