Code Monkey home page Code Monkey logo

laravel-filesystem-oss's Introduction

感谢关注「GitHub 热门」公众号,带你了解技术圈内热门新鲜事!

laravel-filesystem-oss's People

Contributors

bolechen avatar cidosx avatar iidestiny avatar iwisen avatar jxlwqq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

laravel-filesystem-oss's Issues

调用 put 上传文件失败,无报错信息

感谢楼主的包,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'));

Nginx 配置rewrite

阿里云文档也只提供了 apache 捕获Authorization 头信息,Nginx 如何配置

OSS \ Core \ OssException : RequestId: 5CD3569DABF16F2EE7AF112B

上传图片的时候,报这个错误

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);
    }
}

前端直传回调报 405 错误, 求指点下

  • 返回的签名函数如下
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);
}

object name is empty

当oss绑定自定义域名,并且开启自定义域名CDN的时候。
如果在配置时设置为IS_CNAME时出错。

上传图片设置content-type的问题

用laravel的文件系统put方法,上传到阿里云oss以后访问图片是下载的形式,能再上传的时候设置content-type吗?在网上说设置这个能直接浏览器访问

自定义域名开启cdn存在问题

自定义域名开启cdn之后会导致put,delete等api失败。
原因是开启cdn之后解析的别名地址和不开启解析的别名地址是不一致的。
不开启

xxx.oss-cn-shenzhen.aliyuncs.com

开启

xxx.com.w.kunlunca.com

我的使用场景是后端签名前端直传至oss,使用了自定义域名并开启了cdn。直传使用自定义域名不受开不开启cdn影响。
建议增加一个选项,将直传域名和ENDPOINT区别开来。

Configure directory used inside of the OSS bucket

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.

listContents读取效率问题

OSSAdapter里的listContents在读取多层目录的时候会多次调用OSSClient的getObjectMeta,效率很低,会要很长时间才能返回结果

直传回调验签 报错 Call to undefined method Iidestiny\Flysystem\Oss\OssAdapter::verify()

如题,代码如下

    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

php 8.1.8 环境下 SignatureTrait.php on line 28 Passing null to parameter #1 ($datetime) of type string is deprecated

在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');
    }

是否支持「OSS 传输加速」?

OSS 传输加速,是专为 OSS 的互联网上传与下载加速设计的服务。OSS 传输加速,利用全球分布的节点、调度策略与网络链路优化、协议栈参数智能调节、OSS 存储服务层配套优化,提供端到端的传输加速方案。支持上传加速、下载加速,且对静态文件、动态更新文件、非热点文件下载都可以支持加速,无需预热。同时,支持对跨省、跨洋上传、下载,进行加速。

https://help.aliyun.com/document_detail/131312.html?spm=5176.8466035.0.0.7cdd1450vU13KV

切换Bucket后,不能上传文件了?

$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()

大佬封装的signUrl方法,没有添加options参数,导致签名url无法添加图片裁剪

$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;
        }
       ……
    }

laravel9上传问题

提示配置不对,在provide里可以获取到参数,new OssAdapter提示为空

Laravel 调用方法->bucket('test')后无法调用其他方法

代码如下:
`

    $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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.