weixin_39528994
2020-12-01 19:57 阅读 24

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

感谢楼主的包,v2ex 过来。

之前用的是 yangyifan/upload ,换了这个以后,调用 $disk->put() 上传文件报错,部分错误信息如下:

php
{
    "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 上传是成功的:

php
$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'));

该提问来源于开源项目:iiDestiny/laravel-filesystem-oss

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

6条回答 默认 最新

  • weixin_39724004 weixin_39724004 2020-12-01 19:57

    你的域名是不是做了 cdn 加速

    点赞 评论 复制链接分享
  • weixin_39724004 weixin_39724004 2020-12-01 19:57

    目前官方 SDK 包有个 bug,就是做了 CDN 加速的域名,在检查文件是否存在这个接口会直接报错,Flysystem 这个扩展包 put 在上传文件的时候会先去检查这个文件是否存在。

    所以你上传的时候请使用 oss 控制台提供的 endpoint,然后你在页面显示的时候使用 CDN 的域名。

    如果你的自定义域名没有做 CDN 加速,那么是可以正常使用的。

    关联 issue #13

    点赞 评论 复制链接分享
  • weixin_39528994 weixin_39528994 2020-12-01 19:57

    应该是这个问题,我晚点确认一下,感谢这么快的回复!

    罗彦 于2020年3月31日 周二20:02写道:

    目前官方 SDK 包有个 bug,就是做了 CDN 加速的域名,在检查文件是否存在这个接口会直接报错,Flysystem 这个扩展包 put 在上传文件的时候会先去检查这个文件是否存在。

    所以你上传的时候请使用 oss 控制台提供的 endpoint,然后你在页面显示的时候使用 CDN 的域名。

    如果你的自定义域名没有做 CDN 加速,那么是可以正常使用的。

    关联 issue #13 https://github.com/iiDestiny/laravel-filesystem-oss/issues/13

    — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/iiDestiny/laravel-filesystem-oss/issues/18#issuecomment-606584177, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABPTR5XHCCWKNOELF3AXL3RKHLWTANCNFSM4LXPHU2A .

    点赞 评论 复制链接分享
  • weixin_39724004 weixin_39724004 2020-12-01 19:57

    嗯,谢谢支持,下一个版本我避开 CDN 上传,设置一个上传用的 endpoint 和显示 endpoint

    点赞 评论 复制链接分享
  • weixin_39528994 weixin_39528994 2020-12-01 19:57

    确认是这个问题,同时还要设置 isCNamefalse 才能调用 puthas 成功。 目前我的做法是展示的时候用 cdn 域名,其它用默认 endpoint。

    php
    // 展示前临时设置 cdn 域名
    config([
        'filesystems.disks.oss.endpoint' => config('filesystems.disks.oss.cdn'),
        'filesystems.disks.oss.isCName' => true,
    ]);
    

    期待新版本发布。

    点赞 评论 复制链接分享
  • weixin_39724004 weixin_39724004 2020-12-01 19:57

    好的,过几天空了就上新版本。

    点赞 评论 复制链接分享

相关推荐