php获取目录下所有的图片文件,laravel 使用PHP实现七牛云存储图片(文件)上传...

准备1、已存在php5.4,laravel5,mysql5.5(没有使用到),composer,七牛账号(注册[传送门](https://portal.qiniu.com/signup))

2、安装php-sdk,采用composer安装,打开laravel根目录下的composer.json,添加"qiniu/php-sdk": "~7.0"到require关键字下,保存,运行composer update安装,即完成php-sdk的安装。![composer配置]

3、在config目录下添加qiniu.php配置文件,配置七牛相关的信息,配置如下

/**

* 七牛上传配置

*/

return [

'accessKey'=>'yourAccesskey',

'secretKey'=>'yourSecretkey',

'bucket'=>'fpstatic',//上传空间名称

'domain'=>'http://7xidgf.com1.z0.glb.clouddn.com'

];//空间域名4、添加UploadController 控制器,并在router.php文件中添加一条路由,如下

Route::controller('upload','UploadController');

代码实现

先贴整个控制器代码

use App\Http\Requests;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use PhpParser\Node\Expr\Variable;

use Illuminate\Support\Facades\Redis;

use Illuminate\Support\Facades\Input;

//导入七牛相关类

use Qiniu\Auth;

use Qiniu\Storage\BucketManager;

use Qiniu\Storage\UploadManager;

class UploadController extends Controller {

public function __construct(){

$this->middleware('activeUsers');

}

public function getIndex()

{

var_dump(isset($ret));

$data=$this->getPageData();//获取页面显示所需数据

$data['uploadSelected']=true;

return view('portal/upload')->with('data',$data);

}

/**

* 获取页面显示所需数据

* @return multitype:boolean \Illuminate\Support\Facades\mixed NULL

*/

private function getPageData(){

$data=[];//返回视图数据

$data['loginCount']=Redis::get('loginNum');//登陆人数

$data['activeUsersCount']=Input::get('activeUsers');//活跃人数

return $data;

}

public function postDoupload(){

$token=$this->getToken();

$uploadManager=new UploadManager();

$name=$_FILES['file']['name'];

$filePath=$_FILES['file']['tmp_name'];

$type=$_FILES['file']['type'];

list($ret,$err)=$uploadManager->putFile($token,$name,$filePath,null,$type,false);

if($err){//上传失败

var_dump($err);

return redirect()->back()->with('err',$err);//返回错误信息到上传页面

}else{//成功

//添加信息到数据库

return redirect()->back()->with('key',$ret['key']);//返回结果到上传页面

}

}

/**

* 生成上传凭证

* @return string

*/

private function getToken(){

$accessKey=config('qiniu.accessKey');

$secretKey=config('qiniu.secretKey');

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

$bucket=config('qiniu.bucket');//上传空间名称

//设置put policy的其他参数

//$opts=['callbackUrl'=>'http://www.callback.com/','callbackBody'=>'name=$(fname)&hash=$(etag)','returnUrl'=>"http://www.baidu.com"];

return $auth->uploadToken($bucket);//生成token

}

}

视图代码:

@extends('common/index')

@section('content')

选择文件

上传

@if (session('key'))

140x140

@endif

function isValidateFile(obj) {

var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);

if (extend == "") {

alert("请选择图片!");

return false;

}

else {

if (!(extend == "jpg" || extend == "png" || extend =="gif")) {

alert("请上传后缀名为jpg、png或gif的文件!");

return false;

}

}

return true;

}

@endsection

详解:

1、流程:

上传页面选择图片,点击提交,提交到/upload/doupload,路由解析到uploadController下的postDoupload(不懂查看laravel手册路由章节,不用laravel就无所谓了,提交到对控制器器方法即可)

2上传流程

b4421300ead8e74ab27273c4ec920a44.png

so我们首先要生成uptoken

3、导入七牛sdk相关的类

use Qiniu\Auth;

use Qiniu\Storage\BucketManager;

use Qiniu\Storage\UploadManager;

读取配置文件中的key,生成token方法

/**

* 生成上传凭证

* @return string

*/

private function getToken(){

$accessKey=config('qiniu.accessKey');

$secretKey=config('qiniu.secretKey');

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

$bucket=config('qiniu.bucket');//上传空间名称

//设置put policy的其他参数

//$opts=['callbackUrl'=>'http://www.callback.com/','callbackBody'=>'name=$(fname)&hash=$(etag)','returnUrl'=>"http://www.baidu.com"];

return $auth->uploadToken($bucket);//生成token

}

然后就要上传文件了,文件post到了这个方法

public function postDoupload(){

$token=$this->getToken();

$uploadManager=new UploadManager();

$name=$_FILES['file']['name'];

$filePath=$_FILES['file']['tmp_name'];

$type=$_FILES['file']['type'];

list($ret,$err)=$uploadManager->putFile($token,$name,$filePath,null,$type,false);

if($err){//上传失败

var_dump($err);

return redirect()->back()->with('err',$err);//返回错误信息到上传页面

}else{//成功

//添加信息到数据库

return redirect()->back()->with('key',$ret['key']);//返回结果到上传页面

}

}

这里关键的一点是

$uploadManager->putFile($token,$name,$filePath,null,$type,false);

官方文档是这样的

list($ret, $err) = $uploadMgr->putFile($token, null, __file__);

坑爹的一点是,file不讲清楚,那只好去查他的源码了,

查看后得到,putFile方法参数依次为token,存储的文件名,真是路径,参数,和文件类型,传入相应的参数即可成功完成上传

4,在文件上传页面,点击提交之前检测文件是否为图片格式,这里参考的是一位网友的js判断

function isValidateFile(obj) {

var extend = document.form.file.value.substring(document.form.file.value.lastIndexOf(".") + 1);

if (extend == "") {

alert("请选择图片!");

return false;

}

else {

if (!(extend == "jpg" || extend == "png" || extend =="gif")) {

alert("请上传后缀名为jpg、png或gif的文件!");

return false;

}

}

return true;

}

要注意的是记得给html页面中form的name属性设置为“form”

5、上传成功后,将上传的图片显示在上传页面(当然也可以是其他页面,仅测试),直接使用上传成功后返回的key(即文件名)以及空间域名来生成完整的地址(当然不建议这样)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Node.js 中使用七牛云实现图片下载可以按照以下步骤进行: 1. 首先,保你已经安装了 `qiniu` 模块,可以通过以下命令进行安装: ``` npm install qiniu ``` 2. 在你的代码中引入 `qiniu` 模块: ```javascript const qiniu = require('qiniu'); ``` 3. 设置七牛云的相关配置,包括 Access Key、Secret Key 和存储空间的名称: ```javascript const accessKey = 'your-access-key'; const secretKey = 'your-secret-key'; const bucket = 'your-bucket-name'; ``` 4. 初始化七牛云的配置: ```javascript const mac = new qiniu.auth.digest.Mac(accessKey, secretKey); const config = new qiniu.conf.Config(); const bucketManager = new qiniu.rs.BucketManager(mac, config); ``` 5. 定义一个函数来下载图片图片的 key(文件名)作为参数: ```javascript function downloadImage(key) { return new Promise((resolve, reject) => { const savePath = './images/' + key; // 设置保存图片的路径和文件名 const options = { force: true, // 强制覆盖已存在的文件 }; bucketManager.fetch(bucket, key, savePath, options, (err, respBody, respInfo) => { if (err) { reject(err); } else { resolve(respInfo); } }); }); } ``` 6. 调用 `downloadImage` 函数来下载图片图片的 key: ```javascript downloadImage('your-image-key') .then(respInfo => { console.log('图片下载成功', respInfo); }) .catch(err => { console.error('图片下载失败', err); }); ``` 以上代码会将指定的图片下载到当前目录下的 `./images/` 文件夹中,并输出相应的结果信息。 请注意替换代码中的 `your-access-key`、`your-secret-key` 和 `your-bucket-name` 为你自己的七牛云的相关信息,以及将 `'your-image-key'` 替换为你要下载的图片的实际 key。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值