文档章节

js上传图片到七牛云存储

o
 osc_g8254g7s
发布于 2019/08/19 20:42
字数 927
阅读 8
收藏 0

精选30+云产品,助力企业轻松上云!>>>

项目开发过程中遇到一个需求,运营人员需要上传图片到七牛云,最开始的做法是,后台对接七牛,然后出一个接口,前端调用接口,先将图片传到后台,然后后台再上传七牛云,用的过程中发现,图片小的情况下还好,图片一旦到了几十兆甚至几百兆的时候就很慢,前端上传图片到后台需要一定时间,后端上传到七牛又需要一段时间,很是麻烦,所以果断改成了前端直接上传七牛,直接上代码
复制代码
<!doctype html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>js上传图片到七牛</title>
    <style>
        #container{
            width:200px;
            height:200px;
            border:1px solid #9d9d9d;
            border-radius: 6px;
            margin:50px auto;
            position: relative;
            overflow: hidden;
        }
        .upload-progress{
            width:100%;
            height:100%;
            position: absolute;
            top:0;
            left:0;
            background: rgba(0,0,0,0.5);
            z-index: 5;
            color:#fff;
            line-height: 200px;
            text-align: center;
            display: none;
        }
        #uploadImage{
            width:100%;
            height:100%;
            position: absolute;
            top:0;
            left:0;
            z-index: 2;
            text-align: center;
            line-height: 200px;
            cursor: pointer;
        }
        #container img{
            width:100%;
            position: absolute;
            top:0;
            left:0;
            z-index: 1;
        }
    </style>
</head>
<body>
<div id="container">
    <div id="uploadImage">选择文件</div>
    <div class="upload-progress"></div>
</div>

<script src="/moxie.js"></script>
<script src="/plupload.min.js"></script>
<script src="/qiniu.js"></script>
<script>
    var uploader = Qiniu.uploader({
        disable_statistics_report: false,                                   // 禁止自动发送上传统计信息到七牛,默认允许发送
        runtimes: 'html5,flash,html4',                                      // 上传模式,依次退化
        browse_button: 'uploadImage',                                       // 上传选择的点选按钮,必需
        container: 'container',                                             // 上传区域DOM ID,默认是browser_button的父元素
        max_file_size: '100mb',                                             // 最大文件体积限制
        flash_swf_url: 'Moxie.swf',                                         // 引入flash,相对路径
        dragdrop: false,                                                    // 关闭可拖曳上传
        chunk_size: '4mb',                                                  // 分块上传时,每块的体积
        multi_selection: !(moxie.core.utils.Env.OS.toLowerCase() === "ios"),
        uptoken_url: 'XXX',                                                 // 在初始化时,uptoken,uptoken_url,uptoken_func三个参数中必须有一个被设置,uptoken是上传凭证,由其他程序生成;uptoken_url是提供了获取上传凭证的地址,如果需要定制获取uptoken的过程则可以设置uptoken_func;其优先级为uptoken > uptoken_url > uptoken_func
        domain: 'XXX',                                                      // bucket域名,下载资源时用到,必需
        get_new_uptoken: true,                                              // 设置上传文件的时候是否每次都重新获取新的uptoken
        auto_start: true,                                                   // 选择文件后自动上传,若关闭需要自己绑定事件触发上传
        max_retries: 3,                                                     // 上传失败最大重试次数
        save_key: true,
        resize: {                                                           // 想限制上传图片尺寸,直接用resize这个属性
            width: 300,
            height: 300
        },
        init: {
            'FilesAdded': function(up, files) {                             // 文件添加进队列后,处理相关的事情
                plupload.each(files, function(file) {
                    console.log(file)
                });
            },
            'BeforeUpload': function(up, file) {                            // 每个文件上传前,处理相关的事情
                console.log("开始上传之前");
                $(".upload-progress").show();
            },
            'UploadProgress': function(up, file) {                          // 每个文件上传时,处理相关的事情
                console.log("上传中");
                $(".upload-progress").html("上传进度:"+file.percent + "%");
            },
            'FileUploaded': function(up, file, info) {                       // 每个文件上传成功后,处理相关的事情
                console.log("上传成功");
                $(".upload-progress").hide();
                var img = new Image();                                      //创建一个Image对象,实现图片的预下载
                img.src = "http://qiniu.com/"+res.key;
                $("#container").append(img);
            },
            'Error': function(up, err, errTip) {
                console.log("上传出错")
            },
            'UploadComplete': function() {
                //队列文件处理完毕后,处理相关的事情
            }
        }
    });
</script>
</body>
</html>
复制代码

 

需要注意的是:
1、这个uploader初始化的时候如果放在change事件中是不会执行的
2、分块上传时,一些分辨率或者色彩密度较高的图片不支持切片
3、点击选择文件之后函数不执行的原因可能有:1)browse_button和container的值写成了class,但是不支持class,需要改成id名;2)函数没有初始化;3)后台返回来的token字段不正确,如果是这个原因,可以尝试将token改为uptoken

最后附上 七牛官方的上传demo


作者:Eternal丶
链接:https://www.jianshu.com/p/1e53415afb09

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

为什么从HBase的0.96版本开始,舍弃了-ROOT-文件?

HBase结构的读写流程 (1). HBase0.96版本之前: (2). HBase0.96开始: a. 当客户端获取到.meta文件的位置之后,会缓存.meta.文件的位置 b. 客户端还会缓存HRegion的位置 -ROOT-存在的意义: ...

其乐m
17分钟前
12
0
volatile关键字对 - What is the volatile keyword useful for

问题: At work today, I came across the volatile keyword in Java. 今天的工作中,我遇到了Java中的volatile关键字。 Not being very familiar with it, I found this explanation: 不太熟......

技术盛宴
23分钟前
25
0
golang 封装 mysql 和 redis 连接

Mysql封装 package dbimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")var DB *sqlx.DBfunc init(){database, err := sqlx.Op......

开源中国最牛的人
23分钟前
16
0
pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary

pdfbox java.io.IOException: Page tree root must be a dictionary 示例代码 public static void main(String[] args) { try (InputStream sampleInputs = new ClassPathResource("s......

lemos
32分钟前
28
0
整理 Linux下列出目录内容的命令

在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令。但只有 ls 命令能实现这个目的吗?...

良许Linux
33分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部