Express+layui上传图片到七牛云

基于上一篇Express入门。继续写下去哈。

一、新建文件

       在根目录下新建common、config文件夹。在common下新建文件upload.js,在config下新建文件config.js。

       前往http://www.layui.com/下载layui框架,解压到public目录下。目录结构如下:


二、安装依赖

    cnpm install qn bytes multer

三、编写config/config.js

       注册登陆七牛云,获得 Access Key 和 Secret Key以及bucket和origin。

module.exports = {
    //七牛云 配置
    qiniu_config: {
        accessKey: '',
        secretKey: '',
        bucket: '',
        origin: ''
    }
};

四、编写common/upload.js

"use strict";
const qn = require('qn');
const bytes = require('bytes');
const multer = require('multer');
var config = require('../config/config');

// 配置multer
const storage = multer.memoryStorage()
const upload = multer({
    storage: storage,
    limits: {
        fileSize: bytes('2MB') // 限制文件在4MB以内
    },
    fileFilter: function(req, files, callback) {
        // 只允许上传jpg|png|jpeg|gif格式的文件
        var type = '|' + files.mimetype.slice(files.mimetype.lastIndexOf('/') + 1) + '|';
        var fileTypeValid = '|jpg|png|jpeg|gif|'.indexOf(type) !== -1;
        callback(null, !!fileTypeValid);
    }
});

// 这里`image`对应前端中input的name值
exports.upLoadImage = function(req, res) {
    upload.single("file")(req, res, function(err) {
        if (err) return console.error(err);
        if (req.file && req.file.buffer) {
            //获取源文件后缀名
            var fileFormat = (req.file.originalname).split(".");
            //设置上传到七牛云的文件命名
            var filePath = '/upload/'  + "-" + new Date().getTime() + Math.random() + "." + fileFormat[fileFormat.length - 1];
            //七牛相关配置信息
            let client = qn.create(config.qiniu_config);
            // 上传到七牛
            client.upload(req.file.buffer, { key: filePath }, function(err, result) {
                if (err) {
                    return res.json({ status: 0, msg: '上传失败!',  src: ''  });
                }
                return res.json({ status: 1, msg: '上传成功!', src: config.qiniu_config.origin + filePath });
            });
        }
    });
};

五、编写routes/index.js

var express = require('express');
var router = express.Router();
var upload = require('../common/upload');

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('index', { title: 'Express' });
});
//上传
router.post('/upload', function(req, res, next) {
    upload.upLoadImage(req, res);
});

module.exports = router;

六、Postman验证

上传成功。Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,最好是通过chrome网上应用店直接添加到chrome插件中。这一步是保证我们后台代码没有问题。




七、编写views/index.html

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
    <link rel="stylesheet" href="layui/css/layui.css" />
    <link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
    <div class="layui-upload">
        <button type="button" class="layui-btn" id="btn">上传图片</button>
        <div class="layui-upload-list">
            <img class="layui-upload-img" id="img">
            <p id="demoText"></p>
        </div>
    </div>
</body>
<script src="layui/layui.js"></script>
<script>
layui.use('upload', function() {
    var $ = layui.jquery,
        upload = layui.upload;
    //普通图片上传
    var uploadInst = upload.render({
        elem: '#btn',
        url: '/upload',
        before: function(obj) {
            //预读本地文件示例,不支持ie8
            obj.preview(function(index, file, result) {
                $('#img').attr('src', result); //图片链接(base64)
            });
        },
        done: function(res) {
            //如果上传失败
            if (res.status == 0) {
                return layer.alert('上传失败');
            } else {
                return layer.alert('上传成功,图片src为:'+res.src);
            }
            //上传成功
        },
        error: function() {
            //演示失败状态,并实现重传
            var demoText = $('#demoText');
            demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
            demoText.find('.demo-reload').on('click', function() {
                uploadInst.upload();
            });
        }
    });
});
</script>
</html>
完成之后,浏览器界面就显示一个“上传图片”按钮。点击上传图片,选择一张图片后,我的结果如下:


我们可以获取到图片外链。到七牛云查看也是存在这张图片的。图片是上传成功了。开发中直接上传图片是不行的,有时间再写一篇压缩图片上传吧。




  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 答:``` <!DOCTYPE html> <html> <head> <title>Layui上传图片七牛云</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.css"> </head> <body> <div class="layui-upload"> <button type="button" class="layui-btn" id="upload">上传图片</button> <div class="layui-upload-list"> <img class="layui-upload-img" id="demo1"> <p id="demoText"></p> </div> </div> <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script> <script src="https://cdn.staticfile.org/layui/2.5.6/layui.js"></script> <script src="https://cdn.staticfile.org/qiniu-js/1.0.15/qiniu.min.js"></script> <script> //获取七牛上传凭证 $.get("你的获取七牛上传凭证接口", function (data) { var token = data.token; var config = { useCdnDomain: true, region: qiniu.region.z2 }; var putExtra = { fname: "", params: {}, mimeType: ["image/png", "image/jpeg", "image/gif"] }; var observer = { next(res){ console.log(res) }, error(err){ console.log(err) }, complete(res){ console.log(res); } } var observable = qiniu.upload(file, key, token, putExtra, config); var subscription = observable.subscribe(observer); // 上传开始 //取消上传 //subscription.unsubscribe(); }); </script> </body> </html> ``` ### 回答2: 使用Layui七牛云上传图片的代码如下: 首先,确保在页面引入Layui七牛云SDK的相关文件: ```html <link rel="stylesheet" href="https://cdn.staticfile.org/layui/2.5.6/css/layui.css"> <script src="https://cdn.staticfile.org/layui/2.5.6/layui.js"></script> <script src="https://cdn.staticfile.org/qiniu-js/1.0.23/qiniu.min.js"></script> ``` 然后,在HTML创建一个用于上传图片的按钮和一个用于显示图片预览的区域: ```html <input type="file" name="image" id="upload"> <div id="preview"></div> <button class="layui-btn" lay-submit lay-filter="upload">上传图片</button> ``` 接下来,在JavaScript编写Layui的代码,包括上传图片和显示预览图片的逻辑: ```javascript layui.use(['form'], function(){ var form = layui.form; // 初始化七牛云的参数 var uploader = Qiniu.uploader({ runtimes: 'html5', browse_button: 'upload', uptoken_url: '/your/uptoken/url', // 请求服务器获取上传凭证的URL domain: 'http://your-qiniu-domain.com', // 七牛云的空间域名 get_new_uptoken: false, auto_start: false, unique_names: true, filters: { mime_types: [ {title: "Image files", extensions: "jpg,jpeg,png"} ] }, init: { FileUploaded: function(up, file, info) { // 上传完成后,将图片的URL添加到预览区域 var imageUrl = up.getOption('domain') + '/' + file.name; $('#preview').append('<img src="' + imageUrl + '">'); } } }); // 监听上传按钮的点击事件 form.on('submit(upload)', function(){ // 清空预览区域的内容 $('#preview').empty(); // 开始上传图片 uploader.start(); // 阻止表单的默认提交行为 return false; }); }); ``` 其,`uptoken_url`是服务器端用于获取上传凭证的接口URL,需要根据实际情况进行配置。 通过以上代码,当用户选择图片文件并点击上传按钮时,会将图片传到七牛云,并将上传完成后的图片在预览区域进行显示。 ### 回答3: 使用 layui 上传图片七牛云的代码如下: HTML部分: ```html <div class="layui-upload"> <button type="button" class="layui-btn" id="upload">上传图片</button> <input type="hidden" id="qiniuToken" value="" /> <input type="hidden" id="qiniuDomain" value="" /> <div class="layui-upload-list"> <img class="layui-upload-img" id="uploadImage"> <p id="uploadText"></p> </div> </div> ``` JavaScript部分: ```javascript layui.use('upload', function(){ var upload = layui.upload; // 初始化七牛云参数 var qiniuToken = ''; // 七牛云上传凭证 var qiniuDomain = ''; // 七牛云上传域名 // 获取七牛云上传凭证和域名 // 这一部分需要在后端获取,并且将值填入上面的两个变量 // 创建上传实例 var uploadInst = upload.render({ elem: '#upload', // 上传按钮的id url: qiniuDomain, // 七牛云上传域名 headers: { 'Authorization': 'UpToken ' + qiniuToken // 添加七牛云上传凭证 }, done: function(res){ // 上传完毕回调 console.log(res); if(res.code === 0){ $('#uploadImage').attr('src', res.data.src); // 将上传成功的图片显示在页面上 $('#uploadText').text('上传成功'); } else { $('#uploadText').text('上传失败'); } }, error: function(){ // 请求异常回调 $('#uploadText').text('上传失败'); } }); }); ``` 这是一个使用 layui 框架的图片上传功能,使用了 layui 的 upload 模块来实现图片上传功能。首先需要在 HTML 设置上传按钮的id,然后引入 layui 的 upload 模块并初始化实例。在 JavaScript 部分,我们通过获取七牛云的上传凭证和域名,将其填入相应的变量。然后在创建上传实例时,设置上传按钮的id、七牛云上传域名和上传凭证等参数,以及上传成功和失败的回调函数用于处理上传结果。上传按钮被点击后,会触发上传操作,上传成功后通过回调函数将上传成功的图片显示在页面上。 以上代码仅为示例,需要根据具体的七牛云配置进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值