全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

图片上传之FileAPI与NodeJs

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 图片预览和上传的示例代码  # 上传  # 是一个  # 我不  # 有个  # 你就  # 是用来  # 给我们  # 当仁不让  # 我们可以  # 不清楚  # 再来  # 看完  # 也为  # 这几个  # 表单  # 来实现  # 到底是什么  # 能满足  # 可想而知 


相关文章: 音乐网站服务器如何优化API响应速度?  linux top下的 minerd 木马清除方法  在线教育网站制作平台,山西立德教育官网?  如何用腾讯建站主机快速创建免费网站?  香港服务器部署网站为何提示未备案?  Android自定义listview布局实现上拉加载下拉刷新功能  官网建站费用明细查询_企业建站套餐价格及收费标准指南  制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何基于PHP生成高效IDC网络公司建站源码?  表情包在线制作网站免费,表情包怎么弄?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  如何通过西部建站助手安装IIS服务器?  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?  css网站制作参考文献有哪些,易聊怎么注册?  文字头像制作网站推荐软件,醒图能自动配文字吗?  网站制作免费,什么网站能看正片电影?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  如何通过cPanel快速搭建网站?  太平洋网站制作公司,网络用语太平洋是什么意思?  宝塔建站后网页无法访问如何解决?  上海网站制作开发公司,上海买房比较好的网站有哪些?  建站之星logo尺寸如何设置最合适?  阿里云网站制作公司,阿里云快速搭建网站好用吗?  如何配置WinSCP新建站点的密钥验证步骤?  建站之星会员如何解锁更多建站功能?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  建站之星2.7模板快速切换与批量管理功能操作指南  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  Python如何创建带属性的XML节点  建站之家VIP精选网站模板与SEO优化教程整合指南  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站主机核心功能解析:服务器选择与网站搭建流程指南  建站主机选虚拟主机还是云服务器更好?  如何选购建站域名与空间?自助平台全解析  建站之星如何实现网站加密操作?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何在橙子建站中快速调整背景颜色?  番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  大连网站制作公司哪家好一点,大连买房网站哪个好?  网站网页制作专业公司,怎样制作自己的网页?  如何通过远程VPS快速搭建个人网站?  小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化  如何在建站主机中优化服务器配置? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。