oss 图片上传疑惑 求解答

macho

代码

 $image = $request->file('image');
        $path = getenv("OSS_PREFIX").'/cfs-app/images/'.date("Ymd");

        $result = Storage::adapter('public')->path($path)->upload($image);
        var_dump($result);
        var_dump("--------------------------------1");

        //$result->file_name dev/cfs-app/images/20220922/ec8aca9ed183f56e2c1bb26224105d6e.jpg 本地有这个图片且可以访问

        $result = Storage::adapter('oss')->path($path)->upload($result->file_name);
        var_dump($result);
        var_dump("--------------------------------2");

终端

截图

异常

Call to a member function getSize() on string

想不明白了 ~~~ 切换到oss的时候不行了

截图 v1.0

截图

截图 v1.1

截图

截图 v2.1

截图
截图
截图

196 3 0
3个回答

aveadtyx

第一次

$result = Storage::adapter('public')->path($path)->upload($image);

这里的$image是个资源UploadFile[]|UploadFile

第二次的

$result->file_name

是个string

  • macho 15天前

    如果把 $result->file_name 换成 $image 这个的话会抛出异常 fclose(): supplied resource is not a valid stream resource

  • 2548a 15天前

    我给你去看了下那个插件,确实是要传$image对象的,报错应该是在upload方法的132行,你要在128行左右打印那个 $stream 看看

  • 2548a 15天前

    应该是在 $filesystem->writeStream(
    $fileName,
    $stream
    ); 后面打印,应该这里应该是往里面写入东西

  • macho 15天前

    刚试了一波 没打印出来 我感觉已经超出我的能力范畴了 ,我可能要换个包了 哎~难过。

  • 2548a 15天前

    没打印出来值就是那里的问题,猜测可能是因为没有权限造成的fopen失败,

  • 2548a 15天前

    如果是权限问题是你服务器目录权限没配好,跟代码没关系的

  • macho 15天前

    谢谢老哥 耐心解答 ,我public目录权限给到777了

  • 2548a 15天前

    别这样搞,public 不能给777权限的。估计是你用root用户运行的webman,如果是的话,改成用www用户来运行

  • macho 15天前

    我测试环境 我运行webman的用户不是root

2548a

你在 127行
$stream = \fopen($file->getRealPath(), 'r+');
后面打印 $stream 看看,估计就是目录权限问题造成的打开文件失败

  • macho 15天前

    图片存放路径给了777了 结果还是那个问题 而且同一张图片上传会报另一个异常 ,也不知道其他兄弟咋用的额

  • 2548a 15天前

    这后面打印的 $stream 是不是false,要先定位好问题,顺便把 $file->getRealPath() 这个路径也打印出来。你贴图出来我看吧,不然不太信息你看的信息

  • macho 15天前

    老哥 截图v1.0

  • macho 15天前

    除了123 终端没有显示数来任何 $stream 信息

nitron

你这个image的resource在你用

$result = Storage::adapter('public')->path($path)->upload($image);

的时候应该已经是清理掉了,因为是个临时文件
你把这段代码去掉应该就可以跑OSS那一段了

$path = getenv("OSS_PREFIX").'/cfs-app/images/'.date("Ymd");

$result = Storage::adapter('public')->path($path)->upload($image);
var_dump($result);
var_dump("--------------------------------1");

比如改成

$image = $request->file('image');
$path = getenv("OSS_PREFIX").'/cfs-app/images/'.date("Ymd");
$result = Storage::adapter('oss')->path($path)->upload($image);
var_dump($result);
var_dump("--------------------------------2");
  • 2548a 15天前

    对,他前面调用了一次生成本地文件了,我没注意到,无语......

  • macho 15天前

    不行啊 截图v2.1

  • macho 15天前

    异常还是有 但是$stream 打印 resource(373) of type (Unknown)

  • macho 15天前

    再次提交就会包 截图v2.1第三张

  • nitron 15天前

    你这报错说明已经调用了Oss的接口了,现在是OSS返回的错误

  • nitron 15天前

    OSS上有重名文件,将OSS上的文件,先删掉,再重新执行即可。或者先用下面的路径测试

    $path = getenv("OSS_PREFIX").'/cfs-app/images/'.date("YmdHis");
🔝