JSFiddle - React, Tailwind, and code Playground

by 亮 薛

HTML

<script src="https://cdnjs.xueliang.org/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.xueliang.org/ajax/libs/plupload/2.1.8/moxie.js"></script>
<script src="https://cdnjs.xueliang.org/ajax/libs/plupload/2.1.8/plupload.full.min.js"></script>
<script src="https://cdnjs.xueliang.org/ajax/libs/plupload/2.1.8/i18n/zh_CN.js"></script>
<script src="https://cdnjs.xueliang.org/qiniu-js-sdk/dist/qiniu.min.js"></script>
<script src="https://cdnjs.xueliang.org/ajax/libs/angular.js/1.5.0-rc.2/angular.js"></script>
<div ng-controller="appController">
  <div id="container">
    <a href="javascript:;" data-qiniu-upload-btn data-upload-finished="uploadFinished(sourceLink, file, tag)" data-upload-list="imageList0">[选择文件1]</a>
    <a href="javascript:;" data-qiniu-upload-btn data-upload-finished="uploadFinished(sourceLink, file, tag)" data-upload-list="imageList1">[选择文件2]</a>
    <a href="javascript:;" data-qiniu-upload-btn data-upload-finished="uploadFinished(sourceLink, file, tag)" data-upload-list="imageList2">[选择文件3]</a>
  </div>
  <hr>
  <a href="javascript:;">[开始上传]</a>
  <hr>
  <div style="border: 2px solid yellow;">
    <img ng-repeat="image in imageList0" ng-src="{{image.url}}" alt="图片">
  </div>
  <div style="border: 2px solid red;">
    <img ng-repeat="image in imageList1" ng-src="{{image.url}}" alt="图片">
  </div>
  <div style="border: 2px solid green;">
    <img ng-repeat="image in imageList2" ng-src="{{image.url}}" alt="图片">
  </div>
</div>

CSS

img {
  width: 100px;
  height: 100px;
}

JavaScript

var myApp = angular.module('myApp', []).controller('appController', ['$scope', function($scope) {
  $scope.uploadFinished = function(sourceLink, file, tag) {
    $scope[tag] = $scope[tag] || [];
    $scope[tag][$scope[tag].length] = {
      url: sourceLink
    };
  }
}]).directive('qiniuUploadBtn', ['$timeout', function($timeout) {
  return {
    scope: {
      uploadFinished: '&',
      uploadList: '@'
    },
    restrict: 'AEC',
    link: function(scope, element, attrs) {
      /*
      setTimeout(function() {
              scope.$apply(function() {
                scope.uploadFinished({
                  sourceLink: 'xxxxxxxxxxxxx',
                  file: {}
                })
              });
            }, 3000);
            */
      var elementDOM = element.get(0);
      var qiniu = new QiniuJsSDK();
      var uploader = qiniu.uploader({
        runtimes: 'html5,flash,silverlight,html4', // 上传模式,依次退化
        browse_button: elementDOM, // 上传选择的点选按钮,**必需**
        // 在初始化时,uptoken, uptoken_url, uptoken_func 三个参数中必须有一个被设置
        // 切如果提供了多个,其优先级为 uptoken > uptoken_url > uptoken_func
        // 其中 uptoken 是直接提供上传凭证,uptoken_url 是提供了获取上传凭证的地址,如果需要定制获取 uptoken 的过程则可以设置 uptoken_func
        uptoken: 'RF2xVvoygCd2JctMUj90B3uSl7FV9CM0ihkpTpF8:Mj7d_Ki7EtXuZh8RADnYtQTyAPk=:eyJzY29wZSI6ImltYWdlcyIsImRlYWRsaW5lIjoxNDY1MDU4Mzg0fQ==',
        get_new_uptoken: true, // 设置上传文件的时候是否每次都重新获取新的 uptoken
        // downtoken_url: '/downtoken',
        // Ajax请求downToken的Url,私有空间时使用,JS-SDK 将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址
        // unique_names: true,              // 默认 false,key 为文件名。若开启该选项,JS-SDK 会为每个文件自动生成key(文件名)
        save_key: true, // 默认 false。若在服务端生成 uptoken 的上传策略中指定了 `sava_key`,则开启,SDK在前端将不对key进行任何处理
        domain: 'http://o891smr57.bkt.clouddn.com/', // bucket域名,下载资源时用到,**必需**
        max_file_size: '100mb', // 最大文件体积限制
        flash_swf_url: 'path/of/plupload/Moxie.swf', //引入 flash,相对路径
        max_retries: 3, // 上传失败最大重试次数
       ...