zoukankan      html  css  js  c++  java
  • vue上传图片

    vue上传图片,组件用element-ui上传组件

    <el-upload
      class="avatar-uploader"
      action="https://jsonplaceholder.typicode.com/posts/"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload">
      <img v-if="imageUrl" :src="imageUrl" class="avatar">
      <i v-else class="el-icon-plus avatar-uploader-icon"></i>
    </el-upload>

    其中:action 采用绑定的形式,表示上传的接口地址,api :配置跨域时的接口

    :action = "/api/+'upload'"
    axios.defaults.baseURL = '/api';

     on-success 上传成功之后。。。

     before-upload 上传之前。。。,比如验证,大小,尺寸

    上传接口配置完成后,上传一张图片,可以看到有一个请求,查看请求地址,无问题

     看到有一个数据Form Data,已经把图片转成了二进制数据,把数据传到服务器了,接下来写服务器

    // 获取上传文件,但 express 本身没有能力获取到上传文件的数据,因此要一个中间件专门用来获取上传文件 npm i multer
    const express = require('express');
    const path = require('path');
    
    const multer= require('multer');
    // 上传中间件,dest:目标地址  __dirname:当前文件所在文件夹,绝对地址,将来上传的图片二进制文件保存在此处
    const upload = multer({dest:__dirname + '/../../Public/uploadAvatars'});
    
    // const user = require('../../models/Users/user');
    
    const UploadAvatar = express.Router();
    
    //file 就是前段上传图片的 Form Data
    //  express 本身没有req.file,加了中间件,把数据赋值到req上,才有了req.file
    UploadAvatar.post('/upload',upload.single('file'),async (req,res) => {
        const file = req.file;
        res.send(file)
    });
    
    module.exports = UploadAvatar;

    服务器写好,上传图片,可以看到有图片信息在里边,包括路径,大小,filename等

     再看服务器,已经有一个图片二进制文件了,就是刚上传的图片

     接下来,就是把这张图片以URL的形式返回给客户端

    首先,存放在服务器的二进制文件要能被访问到,所有要开放出来

    // 开放静态文件
    app.use('/Public',express.static(__dirname + '/Public'));

    然后在服务器端,还是上面的接口里,但这次多了一个自己拼出来的URL,通过URL客户端就可以访问到图片

    UploadAvatar.post('/upload',upload.single('file'),async (req,res) => {
        const file = req.file;
        file.url = `http://localhost:3000/uploads/${file.filename}`;
        res.send(file)
    });

     可以看到,数据里多了一个URL

    前端,将URL赋值给 组件中的imageUrl

          afterUpload(res){
            this.imageUrl = res.url
          }
  • 相关阅读:
    linux c编程操作数据库(sqlite3应用)
    Silverlight-MEF-DEMO
    微软最有价值专家分享校园招聘心得体会
    C# IOCP服务器项目(学习)
    ASIHTTPRequest类库简介和使用说明
    用Python下载美国国家气候数据中心(NCDC)的气候数据
    20个大家应该知道的大数据资源
    分布式文件系统HDFS,大数据存储实战(一)
    vmware虚拟的ubuntu18.04死机,尝试关闭时关机报“虚拟机xxx繁忙”
    ubuntu下hadoop0.20.2报错/dfs/name is in an inconsistent state
  • 原文地址:https://www.cnblogs.com/zhaohui-116/p/12354927.html
Copyright © 2011-2022 走看看