前面2篇,我们介绍了七牛云的客户端文件直传,客户端直传存在一个问题,就是上传凭证token在前端是暴露的,因此考虑采取通过业务服务器(自己家的服务器)代为上传文件。

整个上传流程用户在前端选择要上传的文件,通过ajax调用业务服务器的上传接口

业务服务器将用户选择的文件,上传到七牛云服务器

七牛云反馈给业务服务器数据

业务服务器反馈给前端数据

我们知道,当用户通过post将form提交到业务服务器时,文件会被放置到服务器上的一个临时位置,此时就相当于客户将文件了一次,然后业务服务器再将该文件上传到七牛云,此时相当于又上传了一次,因此,通过后台上传实际上传了2次,时间肯定会大大加长。

前端html核心代码:

只有一个表单了,不需要token

上传

前端ajax核心代码:var domain="http://yourdomain.clouddn.com/";

$("#submit").on('click',function(){

var formdata=new FormData();

formdata.append('file',$("#file")[0].files[0]);

$.ajax({

type:'post',

url:'/api/qiniu/up',

data:formdata,

cache: false,

contentType:false,

processData: false,

dataType:"json",

error: function(request) {

alert(request.status);

},

success: function(data) {

$("#preview img").attr("src",domain+data.key);

}

});

});

后台php(YII框架)核心代码:

通过七牛云提供的php SDK,很简单的完成了上传$accessKey =qn_accesskey;

$secretKey = qn_secretkey;

$auth = new Auth($accessKey, $secretKey);

$bucket =qn_bucket;

$token= $auth->uploadToken($bucket);

$files=$_FILES['file'];

$filePath = $files['tmp_name'];

// 上传到七牛后保存的文件名

$key =md5(uniqid(md5(microtime(true)),true)).'.'.pathinfo($files['name'])['extension'];

// 初始化 UploadManager 对象并进行文件的上传。

$uploadMgr = new UploadManager();

// 调用 UploadManager 的 putFile 方法进行文件的上传。

list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);

if ($err !== null) {

$return['code']=0;

$return['message']="上传失败";

} else {

$return['code']=1;

$return['message']="上传成功";

$return['key']=$ret['key'];

}

return $this->success($return);

我们前面猜想了,通过后台服务器上传,上传时间会加长,因此我也做了一个测试,记录用户点击时间date1,ajax上传成功时记录date2,然后找了一张1.9M的图片做上传测试,结果如下

客户端直传通过服务器代传

第一次376ms13716ms

第二次379ms14051ms

我的服务器带宽比较小,因此效果对比就非常的明显了,

七牛文件上传优点缺点应用场景

客户端直传速度快暴露了token,可能会被人利用,有安全风险如果产品供内部人员使用,如管理后台,且上传一些大文件,如视频管理,我会选用此方案

业务服务器代传不会暴露token,比较安全速度慢如果产品给用户使用,上传的是图片一类小文件,可以选择此类方式

七牛云 php 服务器,七牛云3:通过业务服务器上传文件到七牛云相关推荐

  1. Go语言实战-通过gin上传文件到七牛云OSS

    上传到文件到七牛云的两种上传方式: 1. 客户端上传到服务器,服务器再上传到七牛云 2.客户端直接通过ajax上传到七牛云 前者:需要上传到服务器,这个过程需要消耗不少带宽,也给服务器带来不小压力,但 ...

  2. 关于前端上传文件到七牛云的一些笔记

    关于前端上传文件到七牛云的一些心得 前言 申请账户 具体步骤 算了 小技巧 七牛云没有监控上传进度和上传错误的 API ?(JS SDK) React 更新 state 中的数组不能触发动画效果? 前 ...

  3. 七牛云配置 koa 上传文件到七牛云

    一.七牛云配置 七牛官网 1.创建七牛存储空间 2.空间添加备案的域名 (若是测试空间可不需要配置) 3.解析CNAME 添加域名后会有CNAME(别名记录),需要将它解析到你的备案域名下 链接-CN ...

  4. 前端通过ajax上传文件到七牛云

    1. 从服务端获取七牛云上传的token,生成token参考官方文档https://developer.qiniu.com/kodo/1208/upload-token 2. 在七牛云文档查找上传的存 ...

  5. Qt——记录:http表单格式上传文件到七牛云和阿里云

    环境:windows10 版本:Qt 5.15.2 工具:Qt Creator 背景:通过http表单格式上传文件,兼容阿里云和七牛云. 一.记录问题:上传文件到阿里云 问题1:ErrorCode: ...

  6. elementui 上传七牛_element ui使用上传组件上传文件到七牛(qiniu-js)

    博主正在重构博客中,刚开始时静态资源都是上传到本地服务器的,但这个项目博主最后打算真正上线运营的.索性就改进了下,把静态资源尽量放到云存储中,方便后续开发.这里把方法和遇到坑给记录下. 1.使用前提注 ...

  7. nodejs的express实现上传文件到七牛

    本文实现上传文件到七牛,动态切换上传空间,MD5设置key值,点击复制七牛返回的链接. 在七牛中注册开发者,获取key 七牛官网--管理控制台(偏右上角)--个人中心(获取秘钥)--对象存储,新建存储 ...

  8. mac上传文件到七牛云,使用qshell上传文件到七牛云

    第一步:下载qshell(其实就是命令行,不是什么直接能打开的文件,也不是exe文件) 地址:https://developer.qiniu.com/kodo/tools/1302/qshell 选择 ...

  9. php上传文件到七牛云源码,laravel上传文件到七牛云存储

    public function store(Request $request) { $file = $request->file('photo') ; if(!$file->isValid ...

最新文章

  1. 华为服务器HBA卡在哪个位置,服务器hba 设置
  2. php member limit,PHPAPP注入第十枚(未过滤)
  3. mysql自连接分组查询最新_MySQL 自连接分组取每组最大N条记录
  4. linux使用flock解决crontab任务冲突
  5. mysql gui vim_vim(一): 小技巧
  6. apicloud模块和html,APICloud教程
  7. swiper实现触摸滑动
  8. 微信小程序 Image 图片实现宽度100%,高度自适应
  9. 飘逸的python - 简明gzip模块压缩教程
  10. Adobe Flash Player 10 插件无法注册
  11. 深度学习 --- 优化入门二(SGD、动量(Momentum)、AdaGrad、RMSProp、Adam详解)
  12. Log Explorer 恢复误删除、更新数据
  13. MySQL-第十一篇JDBC典型用法
  14. 计算机word设置信纸,怎么用Word文字DIY一份信纸?
  15. 局域网常见问题解决方案之你可能没有权限使用网络资源无法访问网上邻居
  16. 轻松实现钉钉机器人定时发消息
  17. hololens2 通信 之 Windows.Networking.Sockets
  18. iPhone上的lrc播放器可以在播放mp3文件时显示歌词
  19. webpack安装及配置
  20. 基于带约束S型加减速曲线的空间直线插补与空间圆弧插补算法(Matlab)

热门文章

  1. .入职薪水10K,每年涨幅5%,50年后工资多少?
  2. 神州大地绿透了,跟着气象卫星看中国
  3. JAVA一头母羊的寿命是5年_母羊生小羊,N年有多少羊问题
  4. linux卸载amd开源驱动,gentoo中amd显卡用开源驱动替换闭源驱动的步骤
  5. 电磁场第一章——矢量分析工具 复习笔记
  6. 30个小知识让你更清楚TypeScript
  7. 类型多样的CAD软件插件素材,速来收藏
  8. runtime error r6025
  9. iOS 报错 You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE) 解决方法
  10. iphone录制脚本_如何在iPhone上录制电话