node 图片上传功能
node 代码:
var http = require("http");
var express = require('express')
app = express(),
formidable = require('formidable'),
fs = require('fs');
app.use(express.static(__dirname + "/public"));
//创建服务器
http.createServer(app).listen(, function() {
console.log("当前您设置的端口号为" + );
});
app.post('/', function(req, res) {
var formidable = require('formidable');
var form = new formidable.IncomingForm(); //创建上传表单
form.encoding = 'utf-8'; //设置编辑
form.uploadDir = 'img/'; //设置上传目录/并且保证该目录存在 否则上传不成功
form.keepExtensions = true; //保留后缀
form.maxFieldsSize = * * ; //文件大小
form.parse(req, function(err, fields, files) {
console.log(fields);//前台传的其他参数
if(err){
console.log(err);
}
var item = null;
for(var i in files){
item = files[i];
}
var extName = ''; //后缀名
switch (item.type) {
case 'image/pjpeg':
extName = 'jpg';
break;
case 'image/jpeg':
extName = 'jpg';
break;
case 'image/png':
extName = 'png';
break;
case 'image/x-png':
extName = 'png';
break;
}
if(extName.length == ){
console.log('只支持png和jpg格式图片');
return;
}
var avatarName = Date.now() + '.' + extName; //设置图片名字
var newPath = form.uploadDir + avatarName; //设置新的图片路径
fs.renameSync(item.path, newPath); //重命名
console.log(newPath);
res.send(newPath);
});
});
form表单上传:
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="fulAvatar" id="file1" />
<input type="text" name="text" id="" value="" />
<input type="submit" value="上传"/>
</form>
ajax上传:
html代码: <input type="file" name="fulAvatar" id="file1" />
<button id='file'>上传</button> js代码:
$('#file').click(function(){
var data = new FormData();
var files = $("#file1")[].files;
if(files){
data.append("fulAvatar", files[]);
}
data.append('name','zs');//传其他数据
if(files[].size>){
alert('上传图片大小不得超过100KB');
return false;
}
$.ajax({
type: 'post',
url:'/',
data:data,
contentType: false,
processData: false,
success : function (msg) {
console.log(msg);
}
})
});
原生ajax上传:
html代码: <input type="file" name="fulAvatar" id="file1" />
<button id='btn'>上传</button> js代码:
document.querySelector('#btn').onclick = function() {
var fileObj = document.getElementById("file1").files[];
var form = new FormData();
form.append("fulAvatar", fileObj);
form.append("test","zs");//传其他数据
var XHR=null;
if (window.XMLHttpRequest) {
// 非IE内核
XHR = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// IE内核,这里早期IE的版本写法不同,具体可以查询下
XHR = new ActiveXObject("Microsoft.XMLHTTP");
} else {
XHR = null;
}
if(XHR){
XHR.open("POST", "http://www.hxh999.cn/img");
XHR.onreadystatechange = function () {
if (XHR.readyState == && XHR.status == ) {
// 这里可以对返回的内容做处理
// 一般会返回JSON或XML数据格式
console.log(XHR.responseText);
// 主动释放,JS本身也会回收的
XHR = null;
}
};
XHR.send(form);
}
}
注意:
form.parse()不会触发的原因是:app.use(express.bodyParser())这一句处理了文件类型的post,所以导致那些第三方包对文件的处理都不起作用了。
express.bodyParser实际上包括了三部分:express.json, express.urlencoded, 和 express.multipart(就是处理了文件的部分),所以我们实际上只需要它的前两部分就够了。
// 将:
app.use(express.bodyParser()); // 改为:
app.use(express.json());
app.use(express.urlencoded());
node 图片上传功能的更多相关文章
- thinkphp达到UploadFile.class.php图片上传功能
片上传在站点里是非经常常使用的功能.ThinkPHP里也有自带的图片上传类(UploadFile.class.php) 和图片模型类(Image.class.php).方便于我们去实现图片上传功能,以 ...
- Spring+SpringMVC+MyBatis+easyUI整合优化篇(七)图片上传功能
日常啰嗦 前一篇文章<Spring+SpringMVC+MyBatis+easyUI整合优化篇(六)easyUI与富文本编辑器UEditor整合>讲了富文本编辑器UEditor的整合与使用 ...
- PHP语言学习之php做图片上传功能
本文主要向大家介绍了PHP语言学习之php做图片上传功能,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 今天来做一个图片上传功能的插件,首先做一个html文件:text.php < ...
- [Ting's笔记Day8]活用套件carrierwave gem:(3)Deploy图片上传功能到Heroku网站
前情提要: 身为Ruby新手村民,创造稳定且持续的学习步调很重要,我用的方法就是一周在IT邦写三篇笔记,希望藉由把笔记和遇到的bug记录下来的过程,能帮助到未来想用Ruby on Rails架站的新手 ...
- H5 利用vue实现图片上传功能。
H5的上传图片如何实现呢? 以下是我用vue实现的图片上传功能,仅供参考. <!DOCTYPE html> <html> <head> <meta chars ...
- 给DEDECMS广告管理中增加图片上传功能
dedecms的广告管理功能稍微有点次,本文就是在dedecms广告管理原有的基础上增加广告图片上传功能. 安装方法,对应自己的dedecms版本下载对应的编码然后解压把里面的文件放在后台目录覆盖即可 ...
- vue 图片上传功能
这次做了vue页面的图片上传功能,不带裁剪功能的! 首先是html代码,在input框上添加change事件,如下: <ul class="clearfix"> ...
- 前端丨如何使用 tcb-js-sdk 实现图片上传功能
前言 tcb-js-sdk 让开发者可以在网页端使用 JavaScript 代码服务访问云开发的服务,以轻松构建自己的公众号页面或者独立的网站等 Web 服务.本文将以实现图片上传功能为例,介绍 tc ...
- Node.js实现图片上传功能
node接口实现 const express = require('express') const mysql = require('mysql') const cors = require('cor ...
随机推荐
- test20181006 投票
题意 分析 考场30分 枚举大小为k的子集的算法终于用上了. 时间复杂度 \[O\left(\binom{n}{k} \cdot \binom {k}{\frac{k}{2}} \cdot k\rig ...
- List和json数组的转换(赋源代码)
public class a11111111 { //参数obj可以是 json对象,字符串, list public static void fun(Object obj){ JSONArray d ...
- mac 使用
普通键盘操作mac电脑,快捷键: 快捷键 功能 ctrl + a 到行首 ctrl + e 到行尾 ctrl + up 打开任务控制(窗口平铺) window + tab 选择任务 ctrl + le ...
- php中__get()和__set的用法
php版本5.6 一般来说,总是把类的属性定义为private,这更符合现实的逻辑.但是,对属性的读取和赋值操作是非常频繁的,因此在PHP5中,预定义了两个函数“__get()”和“__set()”来 ...
- linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)
http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdw ...
- vqmod for opencart插件制作进阶与技巧
FROM: http://www.sdtclass.com/4799.html 15年的时候,我写过一篇文章<略谈 vqmod for opencart 插件制作过程>,也不知道被哪些人抄 ...
- WPF中控制窗口显示位置的三种方式
首先新建一个WPF工程,在主界面添加一个按钮,并给按钮添加点击事件button1_Click,然后新建一个用于测试弹出位置的窗口TestWindow.1.在屏幕中间显示,设置window.Window ...
- Angularjs 事件指令
1. 点击事件 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- 微信小程序篇(微信小程序的支付)
微信小程序的支付和微信公众号的支付是类似的,对比起来还比公众号支付简单了一些,我们只需要调用微信的统一下单接口获取prepay_id之后我们在调用微信的支付即可. 今天我们来封装一般node的支付接口 ...
- java newInstance() 的参数版本与无参数版本详解
newInstance() 的参数版本与无参数版本详解 博客分类: Core Java 通过反射创建新的类示例,有两种方式: Class.newInstance() Constructor.new ...