|
胖子所遇到的问题:
也不是哪个奇葩的网站, 介绍我用 gmars/qiniu 的。 说是和tp5搭。【以后别用了 老老实实用七牛官方的SDK】
当时的参考文献: 参考文献:https://www.cnblogs.com/adobe-lin/p/7699638.html
参考文献:https://blog.csdn.net/z1040657944/article/details/79163176
过了一段时间,我发现个问题: 多图上传的时候 就 TM 把第一张玩命的传。 别的都不传, 【问题本质 就在gmars/qiniu】 ,这里的upload 其实接收到的是所有文件,而不是一个文件。 但是上传只上传第一个。 所以 我直接改掉了 这个文件中的upload 方法,
- /**
- * @param string $saveName
- * @param string $bucket
- * @param file $files
- * @return mixed
- * @throws Exception
- * @throws \Exception
- * 单文件上传,如果添加多个文件则只上传第一个 [这个目前被我改掉了,多文件时候 则传入 think的file对象,循环调用]
- */
- public function upload($saveName = '', $bucket = '',$files)
- {
- // 获取七牛的token
- $token = $this->_getUploadToken($bucket);
- // 在这里接收到的是文件数组
- if (empty($files)) {
- throw new Exception('没有文件被上传', 10002);
- }
- // 返回数组的所有值(非键名)
- // ------老莫修改的值.s
- $values = $files->getInfo();
- // -------老莫.end
- // 循环获取文件数
- $uploadManager = new UploadManager();
- if (empty($saveName)) {
-
- $saveName = hash_file('sha1', $values['tmp_name']).time();
- }
- // 把字符串打散为数组 [其实是为了拿文件名后缀]
- $infoArr = explode('.', $values['name']);
- // 然后 拿到这个文件名后缀
- $extension = array_pop($infoArr);
- // 拼出文件名
- $fileInfo = $saveName . '.' . $extension;
-
- // 在这个位置更改 上传为 数组循环上传即可
- list($ret, $err) = $uploadManager->putFile($token, $saveName, $values['tmp_name']);
- if ($err !== null) {
- throw new Exception('上传出错'.serialize($err));
- }
- return $ret['key'];
- }
复制代码
这个 返回的 是成功存储后的文件名;
然后 怼第二个思路, 由于是循环, 所以文件上传 带上个 key 在数组中, 最后好提取 , 那么 控制器中的函数是这样
- /**
- * @name 循环调用 [七牛云保存]
- * @param file_arr 上传的图片数组
- */
- public function catchFile($file_arr)
- {
- // 申明一个数组,用于存储返回值
- $req_arr = array();
- // 获得7牛云配置信息
- $accessKey = Config::get('qiniu.accessKey');
- $secretKey = Config::get('qiniu.secretKey');
- $bucket = Config::get('qiniu.bucket');
- // 读取配置
- $qiniuConfig = Config::get('qiniu');
- // 循环文件
- foreach($file_arr as $k =>$v)
- {
- // 文件
- $file = $v;
- // 要上传图片的本地路径
- $filePath = $file->getRealPath();
- //后缀
- $ext = pathinfo($file->getInfo('name'), PATHINFO_EXTENSION);
- // 判断是不是图片
- $filetype = ['jpg', 'jpeg', 'gif', 'bmp', 'png'];
- if (!in_array( $ext, $filetype))
- {
- dowjson(1,"请上传图片类型的文件");
- }
- // 上传到七牛后保存的文件名
- $key = substr(md5($file->getRealPath()) , 0, 5). date('YmdHis') . rand(0, 9999) . '.' . $ext;
-
- // 存文件
- try{
- $qiniu = new Qiniu($accessKey,$secretKey,$bucket);
- $result = $qiniu->upload($key, $bucket, $file);
- if($result === false) {
- return json(['code'=>'1','msg'=>"上传失败"]);
- } else {
- // return json(['code'=>'0','msg'=>"上传成功"]);
- // return $key;
- // 添加到返回数组中 这个key就是为了避开多次上传 文件快慢问题
- $req_arr[$k] = $key ;
- }
- }catch (Exception $e){
-
- var_dump($e);
- }
- }
- // 返回数组信息
- return $req_arr;
- }
复制代码
最后就是传入的值 ,传入的值是
- // 拼个文件对象数组出来瞅瞅
- $file_arr = array(
- 'logo_url' => request()->file('logo_url'),
- 'attorney' => request()->file('attorney'),
- 'yyzz' => request()->file('yyzz')
- );
- // var_dump($file_arr);
- // 将这个数组丢到 上传的函数中去执行, 返回的结果为一个 json ;
- $file_arr_req = $this->catchFile($file_arr);
复制代码
|
|