TP5 使用 gmars\qiniu 上传多图时 【七牛的使用问题】
胖子所遇到的问题:也不是哪个奇葩的网站, 介绍我用 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循环调用 [七牛云保存]
* @paramfile_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);
页:
[1]