Maison  >  Article  >  développement back-end  >  Explication détaillée du téléchargement d'images sur l'instance Qiniu Cloud dans le front-end du framework Laravel

Explication détaillée du téléchargement d'images sur l'instance Qiniu Cloud dans le front-end du framework Laravel

巴扎黑
巴扎黑original
2017-09-07 13:50:552157parcourir

Cet article présente principalement l'exemple de code du front-end js dans Laravel pour télécharger des images sur Qiniu Cloud. Il a une certaine valeur de référence. Ceux qui sont intéressés peuvent en apprendre davantage

Ce qui suit utilise le navigateur pour. Téléchargez des images dans Laravel. Vers Qiniu Cloud, voici quelques exemples de processus simples.

1. Présentez d'abord le fichier js correspondant. Ce qui suit est le StaticfileCDN introduit via CDN. Bien sûr, il existe de nombreuses autres façons de télécharger, telles que bower, git et le SDK du site officiel
. Qiniu js est encapsulé sur la base du plug-in Plupload, il nécessite donc Download Plupload, il est recommandé d'utiliser 2.1.1 ~ 2.1.9.


<script src="https://cdn.staticfile.org/jquery/2.2.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/plupload/2.1.9/moxie.js"></script>
<script src="https://cdn.staticfile.org/plupload/2.1.9/plupload.dev.js"></script>
<script src="https://cdn.staticfile.org/qiniu-js-sdk/1.0.14-beta/qiniu.min.js"></script>

2. Créez un bouton pour sélectionner un fichier


  <p id="container">
    <a class="btn btn-default btn-lg " id="pickfiles" href="#" rel="external nofollow" >
      <span>选择文件</span>
    </a>
  </p>

3. Téléchargeur d'initialisation

(veuillez vous assurer que plupload a été introduit dans la page lors de l'initialisation). Ici, nous avons besoin d'un identifiant de téléchargement uptoken, qui doit être généré et fourni par le backend PHP. Parlons de la façon d'obtenir le jeton dans un instant.


  function uploaderReady(token) {
    console.log(token);
    var uploader = Qiniu.uploader({
      runtimes: &#39;html5,flash,html4&#39;,   // 上传模式,依次退化
      browse_button: &#39;pickfiles&#39;,   //上传按钮的ID
      uptoken: token, // uptoken是上传凭证,由其他程序生成
     // uptoken_url: &#39;/uptoken&#39;,    // Ajax请求uptoken的Url,强烈建议设置(服务端提供)
     // uptoken_func: function(){    // 在需要获取uptoken时,该方法会被调用
     //  // do something
     //  return uptoken;
     // },
      get_new_uptoken: false,       // 设置上传文件的时候是否每次都重新获取新的uptoken
      unique_names: true,       // 默认false,key为文件名。若开启该选项,JS-SDK会为每个文件自动生成key(文件名)
      //save_key: true,         // 默认false。若在服务端生成uptoken的上传策略中指定了sava_key,则开启,SDK在前端将不对key进行任何处理
      domain: &#39;http://ovngj7u9c.bkt.clouddn.com&#39;,  // bucket域名,下载资源时用到,必需
      container: &#39;container&#39;,       // 上传区域DOM ID,默认是browser_button的父元素
      max_file_size: &#39;100mb&#39;,       // 最大文件体积限制
      flash_swf_url: &#39;path/of/plupload/Moxie.swf&#39;, //引入flash,相对路径
      max_retries: 1,           // 上传失败最大重试次数
      dragdrop: true,           // 开启可拖曳上传
      drop_element: &#39;container&#39;,     // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
      chunk_size: &#39;4mb&#39;,         // 分块上传时,每块的体积
      auto_start: true,          // 选择文件后自动上传,若关闭需要自己绑定事件触发上传

      init: {
        &#39;FilesAdded&#39;: function (up, files) {
          plupload.each(files, function (file) {
            // 文件添加进队列后,处理相关的事情
          });
        },
        &#39;BeforeUpload&#39;: function (up, file) {
          // 每个文件上传前,处理相关的事情
        },
        &#39;UploadProgress&#39;: function (up, file) {
          // 每个文件上传时,处理相关的事情
        },
        &#39;FileUploaded&#39;: function (up, file, info) {
          // 每个文件上传成功后,处理相关的事情
          // 其中info是文件上传成功后,服务端返回的json,形式如:
          // {
          //  "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
          //  "key": "gogopher.jpg"
          // }
          // 获取url路径 传入后台保存到数据库
           var domain = up.getOption(&#39;domain&#39;);
           var url = JSON.parse(info);
           var sourceLink = domain +"/"+ url.key;

           $.ajax({
            url: &#39;/image&#39;,
            type: &#39;POST&#39;,
            dataType : &#39;json&#39;,
            data: {
              &#39;_token&#39;:"{{ csrf_token() }}",
              "url":sourceLink
            },
           });
        },
        &#39;Error&#39;: function (up, err, errTip) {
          console.log(errTip);
        },
        &#39;UploadComplete&#39;: function () {
          //队列文件处理完毕后,处理相关的事情
        },
        &#39;Key&#39;: function (up, file) {
          // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
          // 该配置必须要在unique_names: false,save_key: false时才生效
          var key = "";
          // do something with key here
          return key
        }
      }
    });
  }

4. Le backend obtient le jeton de certificat de téléchargement

Nous installons d'abord un packagiste Qiniu et une adresse github.


composer require "overtrue/laravel-filesystem-qiniu" -vvv

Ajoutez


&#39;providers&#39; => [
  // Other service providers...
  Overtrue\LaravelFilesystem\Qiniu\QiniuStorageServiceProvider::class,
],

dans app/config.php puis dans config/filesystems. Configurez vos informations Qiniu en PHP


<?php

return [
  //...
  &#39;qiniu&#39; => [
    &#39;driver&#39;   => &#39;qiniu&#39;,
    &#39;access_key&#39; => env(&#39;QINIU_ACCESS_KEY&#39;, &#39;xxxxxxxxxxxxxxxx&#39;),
    &#39;secret_key&#39; => env(&#39;QINIU_SECRET_KEY&#39;, &#39;xxxxxxxxxxxxxxxx&#39;),
    &#39;bucket&#39;   => env(&#39;QINIU_BUCKET&#39;, &#39;test&#39;),
    &#39;domain&#39;   => env(&#39;QINIU_DOMAIN&#39;, &#39;xxx.clouddn.com&#39;), // or host: https://xxxx.clouddn.com
  ],
  //...
];

puis écrivez le code pour obtenir le jeton dans la méthode store de votre contrôleur. Après un certain temps, le front-end peut demander. avec ajax


public function store()
{
  $disk = Storage::disk(&#39;qiniu&#39;);
  $token = $disk->getUploadToken();
  
  return response()->json([&#39;uptoken&#39;=>$token]);
}

5. Après avoir le token, nous continuons à améliorer le code front-end

Afin de comprenez, nous écrivons un ajax pour demander le magasin, bien sûr. Vous pouvez également définir l'adresse de la demande dans l'attribut uptoken_url dans le téléchargeur.


function getTokenMessage() {
  $.ajax({
    url: &#39;你的控制器地址&#39;,
    type: &#39;POST&#39;,
    data: {&#39;_token&#39;:"{{ csrf_token() }}"},
    dataType : &#39;json&#39;,
    success: function (data) {
      var obj = data;
      // 请求成功之后,调用刚刚写好的uploaderReady方法,把token传入过去
      uploaderReady(obj.uptoken);
    }
  });
}
//让页面初始化的时候就请求
$(document).ready(function(){
  getTokenMessage();
});

C'est tout. Pour plus d'opérations, veuillez vous référer au document js officiel de Qiniu Cloud

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn