iidestiny / laravel-filesystem-oss Goto Github PK
View Code? Open in Web Editor NEW:floppy_disk: Oss storage filesystem for Laravel.
:floppy_disk: Oss storage filesystem for Laravel.
v1.2依赖flysystem-oss的版本不对, 缺少SignatureConfig
OSS设置私有权限,并且配置CDN域名后,上传OSS文件会提示无权限,getUrl获取正常。
解决办法:全局setCdnUrl()
我自己打了个包:https://github.com/woodynew/laravel-filesystem-oss.git
期待作者有更优的配置方法,需要iidestiny/flysystem-oss buckets 兼容CDN 域名独立配置
自定义域名开启cdn之后会导致put
,delete
等api失败。
原因是开启cdn之后解析的别名地址和不开启解析的别名地址是不一致的。
不开启
xxx.oss-cn-shenzhen.aliyuncs.com
开启
xxx.com.w.kunlunca.com
我的使用场景是后端签名前端直传至oss,使用了自定义域名并开启了cdn。直传使用自定义域名不受开不开启cdn影响。
建议增加一个选项,将直传域名和ENDPOINT区别开来。
代码如下:
`
$disk = Storage::disk('oss')->bucket('test');
dd($disk->put('test','1231415235422342352354'));
`
错误返回
Call to undefined method Iidestiny\Flysystem\Oss\OssAdapter::put()
取消->bucket('test')后方法调用正常
PHP:7.4
Laravel:8.12
目前如果设置为内网,则上传的文件无法外网访问;如果设置为外网,上传速度慢
如题, 如何增加 acl 、content-type 等配置?看了源码是不支持的
如题,代码如下
public function clientUploadCallback(): JsonResponse
{
$aliyun = Storage::disk('aliyun')->getAdapter();
[$verify, $data] = $aliyun->verify(); // php 7.1 +
Log::debug('verify', [$verify]);
Log::debug('data', [$data]);
if ($verify) {
// 验证失败处理,此时 $data 为验签失败提示信息
}
// 注意一定要返回 json 格式的字符串,因为 oss 服务器只接收 json 格式,否则给前端报 CallbackFailed
return response()->json($data);
}
验签是报错 Call to undefined method Iidestiny\Flysystem\Oss\OssAdapter::verify(), verify方法不存在
不知道哪里出问题了
Laravel : 8.83.17
PHP: 8.0
iidestiny/laravel-filesystem-oss: 2.1
Hi, is it possible to specify the directory that would be used inside this package configuration?
For example in S3 package I could do it like this inside the root:-
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'bucket' => env('AWS_BUCKET'), 'root' => env('AWS_ROOT'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), ],
Please advise, thanks.
当oss绑定自定义域名,并且开启自定义域名CDN的时候。
如果在配置时设置为IS_CNAME时出错。
在php8.1下会产生警告
local.WARNING: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /var/www/picoding_dev/vendor/iidestiny/flysystem-oss/src/Traits/SignatureTrait.php on line 28
下面这段代码:
public function gmt_iso8601($time)
{
// fix bug https://connect.console.aliyun.com/connect/detail/162632
return (new \DateTime(null, new \DateTimeZone('UTC')))->setTimestamp($time)->format('Y-m-d\TH:i:s\Z');
}
packagist.org此包的版本还停留在1.2.1,麻烦大佬看看是否自动更新出问题了
OSSAdapter里的listContents在读取多层目录的时候会多次调用OSSClient的getObjectMeta,效率很低,会要很长时间才能返回结果
$disk = Storage::disk('oss');
$disk = $disk->bucket('resources')->put('filename.jpg');
我是这样配置 filesystem
文件的
'oss' => [
'driver' => 'oss',
'root' => '', //
'access_key' => env('ALIYUN_ACCESS_KEY_ID'),
'secret_key' => env('ALIYUN_ACCESS_KEY_SECRET'),
'endpoint' => env('OSS_ENDPOINT'),
'bucket' => env('OSS_BUCKET'),
'isCName' => env('OSS_IS_CNAME', false),
'buckets' => [
'resources' => [
'access_key' => env('ALIYUN_ACCESS_KEY_ID'),
'secret_key' => env('ALIYUN_ACCESS_KEY_SECRET'),
'endpoint' => env('OSS_RESOURCES_ENDPOINT'),
'bucket' => env('OSS_RESOURCES_BUCKET'),
'isCName' => env('OSS_RESOURCES_BUCKET_IS_CNAME', false),
]
]
],
切换 bucket
之后, $disk
变成了调用 OssAdapter
静态方法,没切换之前是 FilesystemAdapter
Call to undefined method Iidestiny\Flysystem\Oss\OssAdapter::put()
项目composer还依赖1.0版本flysystem-oss,需要更新一下依赖
用laravel的文件系统put方法,上传到阿里云oss以后访问图片是下载的形式,能再上传的时候设置content-type吗?在网上说设置这个能直接浏览器访问
OSS 传输加速,是专为 OSS 的互联网上传与下载加速设计的服务。OSS 传输加速,利用全球分布的节点、调度策略与网络链路优化、协议栈参数智能调节、OSS 存储服务层配套优化,提供端到端的传输加速方案。支持上传加速、下载加速,且对静态文件、动态更新文件、非热点文件下载都可以支持加速,无需预热。同时,支持对跨省、跨洋上传、下载,进行加速。
https://help.aliyun.com/document_detail/131312.html?spm=5176.8466035.0.0.7cdd1450vU13KV
public function getSignature()
{
$disk = Storage::disk('oss');
$baseUrl = $_SERVER["HTTP_HOST"];
$config = $disk->signatureConfig($prefix = 'douyin/', $callBackUrl = $baseUrl . '/admin/aliyun/callback', $customData = [], $expire = 30);
return $config;
}
回调函数的路由是:
Route::get('/admin/aliyun/callback', [AdminDouYinController::class, 'ossCallback']);
回调函数如下:
public function ossCallback()
{
$disk = Storage::disk('oss');
list($verify, $data) = $disk->verify();
return response()->json($data);
}
阿里云文档也只提供了 apache 捕获Authorization 头信息,Nginx 如何配置
// 验证签名
$ok = openssl_verify($authStr, $authorization, $pubKey, OPENSSL_ALGO_MD5);
这里出现不ok,求楼主提供一个检测思路
大佬可以先把图片传给后端,然后后端走内网传给OSS吗?
如题,endpoint写https方式不行,因为 bucket 还有配置,配完后获得URL就不正确了
PHP8 是不是不支持了?
laravel 10 不能用啊
这么久都不更新了,有谁克隆一下更新一下
$this->client->signUrl($this->bucket, $path, $timeout)中,作者没有添加options参数
如果如果添加图片裁剪等参数x-oss-process
时,无法传入参数。
如果在签名url后拼接参数,阿里云会反馈签名错误的。
因此,需要加上options参数
public function signUrl($path, $timeout)
{
……
try {
$path = $this->client->signUrl($this->bucket, $path, $timeout);
} catch (OssException $exception) {
return false;
}
……
}
基础依赖组件 league/flysystem 版本是 ^1.0,和laravel9 依赖的^3.0冲突
感谢楼主的包,v2ex 过来。
之前用的是 yangyifan/upload
,换了这个以后,调用 $disk->put()
上传文件报错,部分错误信息如下:
{
"message": ": RequestId: 5E832A2C88FF193538F3771A",
"exception": "OSS\\Core\\OssException",
"file": "/Users/edz/Sites/youzan-social-app/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php",
"line": 97,
"trace": [
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php",
"line": 28,
"function": "parseResponse",
"class": "OSS\\Result\\Result",
"type": "->"
},
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/aliyuncs/oss-sdk-php/src/OSS/OssClient.php",
"line": 1417,
"function": "__construct",
"class": "OSS\\Result\\Result",
"type": "->"
},
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/iidestiny/flysystem-oss/src/OssAdapter.php",
"line": 468,
"function": "doesObjectExist",
"class": "OSS\\OssClient",
"type": "->"
},
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/league/flysystem/src/Filesystem.php",
"line": 57,
"function": "has",
"class": "Iidestiny\\Flysystem\\Oss\\OssAdapter",
"type": "->"
},
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/league/flysystem/src/Filesystem.php",
"line": 98,
"function": "has",
"class": "League\\Flysystem\\Filesystem",
"type": "->"
},
{
"file": "/Users/edz/Sites/youzan-social-app/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php",
"line": 225,
"function": "put",
"class": "League\\Flysystem\\Filesystem",
"type": "->"
},
{
...
在 laravel tinker 下调试,直接用 oss client 上传是成功的:
$disk = Storage::cloud();
$oss = $disk->kernel();
// 这行是失败的
$disk->put('test.jpg', file_get_contents('/tmp/test.jpg'));
// 这行是成功的
$oss->putObject('bole-saas', 'test.jpg', file_get_contents('/tmp/test.jpg'));
root 设置了没有效果
大佬适配下laravel10呀
access_key 改为 access_id
signUrl 能否直接获取cdn的域名 而非oss endpoint 域名
NoSuchKey
The specified key does not exist.
你好,你的包也存在使用自定义域名的bug,能修复不
支持 getUrl 方法,解决阿里云 isCName 和 CDN 冲突的问题
提示配置不对,在provide里可以获取到参数,new OssAdapter提示为空
能不能根据文件地址直接上传文件
上传图片的时候,报这个错误
vendor/aliyuncs/oss-sdk-php/src/OSS/Result/Result.php
public function parseResponse()
{
$this->isOk = $this->isResponseOk();
if ($this->isOk) {
$this->parsedData = $this->parseDataFromResponse();
} else {
$httpStatus = strval($this->rawResponse->status);
$requestId = strval($this->getRequestId());
$code = $this->retrieveErrorCode($this->rawResponse->body);
$message = $this->retrieveErrorMessage($this->rawResponse->body);
$body = $this->rawResponse->body;
$details = array(
'status' => $httpStatus,
'request-id' => $requestId,
'code' => $code,
'message' => $message,
'body' => $body
);
throw new OssException($details);
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.