资讯专栏INFORMATION COLUMN

Laravel中前端js上传图片到七牛云

jollywing / 1454人阅读

摘要:以下中使用浏览器端上传图片到七牛云,下面只是做一些简单的流程实例。你的控制器地址请求成功之后,调用刚刚写好的方法,把传入过去让页面初始化的时候就请求这里差不多就可以啦,更多的操作参考文档七牛云官方文档

以下Laravel中使用浏览器端上传图片到七牛云,下面只是做一些简单的流程实例。
详情请看官方文档七牛云官方js文档

1. 首先引入相应的js文件,下面是通过CDN引入的StaticfileCDN,当然也有其他很多方式下载, bower,git,官网的SDK

七牛js基于Plupload插件封装,所以需要下载Plupload,建议使用 2.1.1 ~ 2.1.9。

</>复制代码

2.创建一个选择文件的按钮

</>复制代码

  1. 选择文件
3.初始化 uploader

(请确保在执行初始化时,页面已经引入 plupload),这里我们需要一个uptoken上传凭证,这个需要php后端生成提供。一会下面我们来说怎么获取token。

</>复制代码

  1. function uploaderReady(token) {
  2. console.log(token);
  3. var uploader = Qiniu.uploader({
  4. runtimes: "html5,flash,html4", // 上传模式,依次退化
  5. browse_button: "pickfiles", //上传按钮的ID
  6. uptoken: token, // uptoken是上传凭证,由其他程序生成
  7. // uptoken_url: "/uptoken", // Ajax请求uptoken的Url,强烈建议设置(服务端提供)
  8. // uptoken_func: function(){ // 在需要获取uptoken时,该方法会被调用
  9. // // do something
  10. // return uptoken;
  11. // },
  12. get_new_uptoken: false, // 设置上传文件的时候是否每次都重新获取新的uptoken
  13. unique_names: true, // 默认false,key为文件名。若开启该选项,JS-SDK会为每个文件自动生成key(文件名)
  14. //save_key: true, // 默认false。若在服务端生成uptoken的上传策略中指定了sava_key,则开启,SDK在前端将不对key进行任何处理
  15. domain: "http://ovngj7u9c.bkt.clouddn.com", // bucket域名,下载资源时用到,必需
  16. container: "container", // 上传区域DOM ID,默认是browser_button的父元素
  17. max_file_size: "100mb", // 最大文件体积限制
  18. flash_swf_url: "path/of/plupload/Moxie.swf", //引入flash,相对路径
  19. max_retries: 1, // 上传失败最大重试次数
  20. dragdrop: true, // 开启可拖曳上传
  21. drop_element: "container", // 拖曳上传区域元素的ID,拖曳文件或文件夹后可触发上传
  22. chunk_size: "4mb", // 分块上传时,每块的体积
  23. auto_start: true, // 选择文件后自动上传,若关闭需要自己绑定事件触发上传
  24. init: {
  25. "FilesAdded": function (up, files) {
  26. plupload.each(files, function (file) {
  27. // 文件添加进队列后,处理相关的事情
  28. });
  29. },
  30. "BeforeUpload": function (up, file) {
  31. // 每个文件上传前,处理相关的事情
  32. },
  33. "UploadProgress": function (up, file) {
  34. // 每个文件上传时,处理相关的事情
  35. },
  36. "FileUploaded": function (up, file, info) {
  37. // 每个文件上传成功后,处理相关的事情
  38. // 其中info是文件上传成功后,服务端返回的json,形式如:
  39. // {
  40. // "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
  41. // "key": "gogopher.jpg"
  42. // }
  43. // 获取url路径 传入后台保存到数据库
  44. var domain = up.getOption("domain");
  45. var url = JSON.parse(info);
  46. var sourceLink = domain +"/"+ url.key;
  47. $.ajax({
  48. url: "/image",
  49. type: "POST",
  50. dataType : "json",
  51. data: {
  52. "_token":"{{ csrf_token() }}",
  53. "url":sourceLink
  54. },
  55. });
  56. },
  57. "Error": function (up, err, errTip) {
  58. console.log(errTip);
  59. },
  60. "UploadComplete": function () {
  61. //队列文件处理完毕后,处理相关的事情
  62. },
  63. "Key": function (up, file) {
  64. // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
  65. // 该配置必须要在unique_names: false,save_key: false时才生效
  66. var key = "";
  67. // do something with key here
  68. return key
  69. }
  70. }
  71. });
  72. }
4.后端获取上传凭证token

首先我们先去安装一个七牛的packagist,github地址。

</>复制代码

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

在app/config.php里面添加

</>复制代码

  1. "providers" => [
  2. // Other service providers...
  3. OvertrueLaravelFilesystemQiniuQiniuStorageServiceProvider::class,
  4. ],

然后在config/filesystems.php配置好你的七牛信息

</>复制代码

  1. [
  2. "driver" => "qiniu",
  3. "access_key" => env("QINIU_ACCESS_KEY", "xxxxxxxxxxxxxxxx"),
  4. "secret_key" => env("QINIU_SECRET_KEY", "xxxxxxxxxxxxxxxx"),
  5. "bucket" => env("QINIU_BUCKET", "test"),
  6. "domain" => env("QINIU_DOMAIN", "xxx.clouddn.com"), // or host: https://xxxx.clouddn.com
  7. ],
  8. //...
  9. ];

然后在你控制器store方法中写入获取token的代码,一会好让前端用ajax请求获得

</>复制代码

  1. public function store()
  2. {
  3. $disk = Storage::disk("qiniu");
  4. $token = $disk->getUploadToken();
  5. return response()->json(["uptoken"=>$token]);
  6. }
5.有了token之后我们继续来完善前端代码

为了理解我们写一个ajax去请求store,当然你也可以在uploader里的uptoken_url属性设置请求地址。

</>复制代码

  1. function getTokenMessage() {
  2. $.ajax({
  3. url: "你的控制器地址",
  4. type: "POST",
  5. data: {"_token":"{{ csrf_token() }}"},
  6. dataType : "json",
  7. success: function (data) {
  8. var obj = data;
  9. // 请求成功之后,调用刚刚写好的uploaderReady方法,把token传入过去
  10. uploaderReady(obj.uptoken);
  11. }
  12. });
  13. }
  14. //让页面初始化的时候就请求
  15. $(document).ready(function(){
  16. getTokenMessage();
  17. });

这里差不多就可以啦,更多的操作参考文档七牛云官方js文档

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/85192.html

相关文章

  • Laravel前端js上传图片到七牛云

    摘要:以下中使用浏览器端上传图片到七牛云,下面只是做一些简单的流程实例。你的控制器地址请求成功之后,调用刚刚写好的方法,把传入过去让页面初始化的时候就请求这里差不多就可以啦,更多的操作参考文档七牛云官方文档 以下Laravel中使用浏览器端上传图片到七牛云,下面只是做一些简单的流程实例。详情请看官方文档七牛云官方js文档 1. 首先引入相应的js文件,下面是通过CDN引入的Staticfi...

    EscapedDog 评论0 收藏0
  • 关于七牛云正确使用姿势探索

    摘要:,在后续测试时遇到一个诡异,当文件过大时,任务脚本上传到七牛云失败。当我遇到大文件无法上传到七牛云时,断点调试到这里,发现返回的是。后来还真被我找到了,七牛云官方提供一个脚本工具。 业务场景 需求 我们项目有一个文件上传需求,需要从客户端上传到七牛云的对象存储和自己的应用服务器上。这里使用七牛云主要是实现下载分发。应用服务器需要留一份是因为后续需要做文件分析(并且是上传后需要立马分析出...

    3fuyu 评论0 收藏0
  • Canvas保存图片到七牛云

    摘要:最近在做一个项目,需要在前端对图片切片并上传到七牛云技术要点可将保存成二进制文件将二进制文件添加到中上传数据到后端处理代码实现目前没有看到七牛云提供的支持上传到云上的,所以这里自己实现了一下注意到七牛云的时候不要设置,让浏览器自己处理请求 最近在做一个项目,需要在前端对图片切片并上传到七牛云 技术要点 canvas.toBlob(blob=>{}); //可将canvas保存成...

    Carl 评论0 收藏0
  • element 上传组件 el-upload 的经验总结

    摘要:正文上传图片到七牛云这个需要前后端的配合才能实现,这里是官方的参考链接。参考链接组件的怎么获取进度值谷歌找到的其一谷歌找到的其二完 前言 最近在做后台管理项目,采用的 vue-element-admin ,上传图片是一个很常用的功能,也遇到了很多问题,刚好趁此机会做一些总结。 初步总结下会提到的问题,目录如下: el-upload 自定义上传方法 图片上传到七牛云 图片压缩后再上传(...

    Neilyo 评论0 收藏0

发表评论

0条评论

jollywing

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<