资讯专栏INFORMATION COLUMN

vuejs使用FormData,ajax上传图片文件

zollero / 2071人阅读

摘要:我相信很多使用的朋友,都有采用上传图片的需求,因为前后端分离后,我们希望都能用来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用能够无刷新上传图片等文件。

我相信很多使用vuejs的朋友,都有采用ajax上传图片的需求,因为前后端分离后,我们希望都能用ajax来解决数据问题,传统的表单提交会导致提交成功后页面跳转,而使用ajax能够无刷新上传图片等文件。
其实已经有朋友封装了相关的npm包,但是我想说用原生的js api来实现,也用不了多少代码,而且更灵活,能使用原生就尽量用原生。接下来就以一个简单的头像上传来说明如何使用。

效果图

前端实现

解释一下上面代码的意思,当我们点击图片会触发setAvatar函数,该函数会触发input的click事件,于是就会弹出文件选择框,当我们选择了一张图片后,触发chageImage函数,这个函数的功能就是预览你上传的图片,单后当我们点击修改按钮后,就会把资源传到后端

后端处理

后端接收到你上传的资源,肯定要把资源保存到服务器,我就以Nodejs来说明,我使用formidable解析上传的数据

exports.avatar = function(req, res, next) {
  let form = new formidable.IncomingForm()
  form.parse(req, function(err, fields, files) {
    if (err) {
      return res.json({
        "code": 500,
        "message": "内部服务器错误"
      })
    }

    // 获取后缀名
    let extname = path.extname(files.avatar.name)
    let oldpath = files.avatar.path;
    let newpath = "./public/avatar" + extname;
    let avatarName = "avatar" + extname;
    // 更改名字和路径
    fs.rename(oldpath, newpath, function(err) {
      if (err) {
        return res.json({
          "code": 401,
          "message": "图片上传失败"
        })
      }
    })
    // 更新数据库
    db.updateMany("users", { "user": username }, { "avatar": avatarName },
      function(err, result) {
        if (err) {
          return res.json({
            "code": 401,
            "message": "头像更新失败"
          })
        }
        return res.json({
          "code":200,
          "message": "头像上传成功"
        })
      })
  })
}

后端解析ajax提交的数据和解析采用传统表单提交的数据方法一样,如果你是做前端开发的,不了解后端代码影响不大。
说这么多,还是来个demo吧,https://github.com/wmui/vueblog,这个小项目后台有个头像修改的功能,是使用ajax上传图片的,核心代码百行不到,前后端分离。
在这里挺感谢sf和掘金的朋友的,开源此项目半月左右,收到200多个star,人生第一次这么辉煌。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/84708.html

相关文章

  • Ajax文件上传

    摘要:简单的上传例子先在里面准便好标签添加上传文件上传文件解读步骤的对象获取,对象生成使用的事件来获取,文件的内容使用的方法来添加一个新值到里面来使用的的方法来上传文件原理说明对象其实不止是可以用来上传文件,如同其名,可以模拟一系列表单控件的 showImg(https://segmentfault.com/img/bVbbKYh?w=1366&h=660); FormData 简单的上传例...

    tomato 评论0 收藏0
  • nodejs express图片上传前后端配置讲解

    摘要:默认地,表单数据会编码为。就是说,在发送到服务器之前,所有字符都会进行编码空格转换为加号,特殊符号转换为值。提交说明文件上传。图片选择图片地址上传上传。用表单直接构造对象就不需要下面的方法来为表单进行赋值了。 nodejs图片上传 nodejs一般开发网站基本都用express框架,本文也主要以express为例,讲解如何上传图片;express本身没有上传图片功能;一般都是集成相应的...

    tuniutech 评论0 收藏0
  • blob和base64转文件并通过ajax上传到服务器

    摘要:有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。现在我们来通过的或者方法对象对象来通过上传图片。 有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。比如,用video模拟一个摄像头,通过webrtc调用摄像头的方式拍一张照,然后通过canva...

    bingchen 评论0 收藏0
  • blob和base64转文件并通过ajax上传到服务器

    摘要:有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。现在我们来通过的或者方法对象对象来通过上传图片。 有时候,我们不想通过上传本地图片的方式上传图片,而是通过相机拍照,将这个拍照后的图片直接上传到服务器上,不需要保存到本地。比如,用video模拟一个摄像头,通过webrtc调用摄像头的方式拍一张照,然后通过canva...

    tuomao 评论0 收藏0
  • javascript图片上传相关资料整理

    摘要:说明使用获取表单的数据,不同通过和获取值上传图片这三个参数必须配置该处使用了来获取文件上传的进度本人没实验,待测图片压缩 图片上传的多种方式 一.使用Form表单,enctype=multipart/form-data 说明:1.监听input上的change事件可以实现自动上传到服务器2.服务器端通过name字段,获取上传图片的信息 3.数据信...

    liukai90 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<