图片上传之FileAPI与NodeJs
发布时间 - 2026-01-10 22:46:55 点击率:次HTML5之fileAPI

HTML5之fileAPI使得我们处理图片上传更加简单。
实例
html代码
<div class="form-group"> <label for="modal_inputFile" class="col-md-3 control-label label-font">位置图:</label> <div class="col-md-9"> <input type="text" readonly="" class="form-control" placeholder="点击选择文件"> <input type="file" id="modal_inputFile"> <img src="" class="img-responsive" id="modal-pre" alt="预览区" style="max-height: 300px"> </div> </div>
效果:
这里我们可以通过$("#modal_inputFile")[0].files[0]来获取到图片的信息。
这里有name,size,type这几个我们常用的属性。
实现预览
选择好图片后,我们都希望会有个预览功能。这个html5也为我们想到了。
他提供了FileReader这个新的对象给我们。
FileReader该接口主要用来把文件读入内存,并且读取文件中的数据。
这样我们就可以通过date url来实现预览了。
var file = document.getElementById(modal_inputFile'').files[0];
if (!file) {
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(e) {
var ib_pre = document.getElementById('modal-pre');
ib_pre.src = this.result;
}
这样就实现了预览。
我们再来查看下img的src。
<img src="data:image/png;base64,iVBORXXXXXXXXXXXXX....XXXXXXX" class="img-responsive" id="modal-pre" alt="预览区" style="max-height: 300px">
src是base64编码。
与后台对接
既然前端使用文件API能满足我们的需求,那我们接下来就需要上传到服务端了。当仁不让的就是NodeJs了。
前端请求
下面是前端发起请求的例子:
//图片上传
$('#preUpload').on('click', function(e) {
var data = new FormData();
var _files = $("#modal_inputFile")[0].files[0];
var ect = ($("#modal_inputFile")[0].files[0]).name.split('.')[1];
if(ect !== 'png'){
alert('请上传png图片!')
return;
}
data.append("modal_file", _files);
$.ajax({
type: 'post',
dataType: 'json',
url: window.stnt_hosts + 'thirdAdmanage/upload/modal',
data: data,
contentType: false,
processData: false
}).done(function(data, status) {
console.log('上传成功');
}).fail(function(err) {
console.log('上传失败');
})
})
这里通过FormData来处理我们需要上传的数据。
这里的data数据是一个序列过的对象。后台接受就行了。
后端处理
服务端我们使用node-formidable来处理图片的保存等操作。
见代码:
var formidable = require("formidable");
var form = new formidable.IncomingForm();
//临时目录
form.uploadDir = './upload/';
//预览图片上传
router.post('/upload/modal', function(req, res, next) {
form.parse(req, function(err, fields, files) {
if (files.modal_file) {
rename(files.modal_file.path, files.modal_file.name, 'preview')
res.send({
stats:'success',
data:[]
})
}
})
});
function rename(old, _new, code, bId) {
var path = './upload/' + code + '/';
fs.exists(path, function(exists) {
if (!exists) {
fs.mkdir(path)
console.log('创建文件夹!')
}
fs.renameSync(old, path + _new, function(err) {
if (err) {
console.log(err);
return;
}
console.log('上传成功!')
})
})
}
这里使用fs.renameSync的原因是,我们里面设置的临时目录form.uploadDir是存在于内存中的数据,并不是真正的图片。
类似这样
我们需要通过fs的方法,将文件重新保存到我们需要的地方即可。这时候就是图片了。
最后
这里的form.parse(req, function(err, fields, files)中的fields与files到底是什么对象,一定要自己调试着看。看完你就明白是什么了。
之前我不清楚的时候就是打开浏览器就搜索,结果可想而知很惨,几乎全是错的。
所以不清楚的话一定要去查github。
还有app.use(bodyParser.urlencoded({ extended: true }));的作用是用来解析我们通常的form表单提交的数据,也就是请求头中包含这样的信息: Content-Type: application/x-www-form-urlencoded
app.use(bodyParser.json())是用来解析json的。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# 图片上传
# FileAPI
# NodeJs
# Nodejs+angularjs结合multiparty实现多图片上传的示例代码
# NodeJS实现图片上传代码(Express)
# 详解nodejs实现本地上传图片并预览功能(express4.0+)
# nodejs利用ajax实现网页无刷新上传图片实例代码
# ajax +NodeJS 实现图片上传实例
# angular2+nodejs实现图片上传功能
# nodejs 整合kindEditor实现图片上传
# 轻松创建nodejs服务器(10):处理上传图片
# nodejs 图片预览和上传的示例代码
# 上传
# 是一个
# 我不
# 有个
# 你就
# 是用来
# 给我们
# 当仁不让
# 我们可以
# 不清楚
# 再来
# 看完
# 也为
# 这几个
# 表单
# 来实现
# 到底是什么
# 能满足
# 可想而知
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】
Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Laravel如何使用Eloquent进行子查询
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
javascript中对象的定义、使用以及对象和原型链操作小结
Bootstrap CSS布局之列表
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
如何解决hover在ie6中的兼容性问题
如何在局域网内绑定自建网站域名?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
如何在橙子建站中快速调整背景颜色?
南京网站制作费用,南京远驱官方网站?
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
java ZXing生成二维码及条码实例分享
Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南
如何在阿里云香港服务器快速搭建网站?
谷歌浏览器如何更改浏览器主题 Google Chrome主题设置教程
如何用5美元大硬盘VPS安全高效搭建个人网站?
教你用AI润色文章,让你的文字表达更专业
如何在腾讯云服务器快速搭建个人网站?
如何利用DOS批处理实现定时关机操作详解
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
如何用好域名打造高点击率的自主建站?
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
MySQL查询结果复制到新表的方法(更新、插入)
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
如何在万网自助建站平台快速创建网站?
创业网站制作流程,创业网站可靠吗?
ai格式如何转html_将AI设计稿转换为HTML页面流程【页面】
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
音响网站制作视频教程,隆霸音响官方网站?
Laravel怎么在Controller之外的地方验证数据
长沙企业网站制作哪家好,长沙水业集团官方网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
黑客如何通过漏洞一步步攻陷网站服务器?
如何在企业微信快速生成手机电脑官网?
潮流网站制作头像软件下载,适合母子的网名有哪些?
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
开心动漫网站制作软件下载,十分开心动画为何停播?
,在苏州找工作,上哪个网站比较好?

