【问题标题】:Image saved always empty with Storage::put in Laravel在 Laravel 中使用 Storage::put 保存的图像始终为空
【发布时间】:2017-10-19 22:04:33
【问题描述】:

我正在尝试使用 Storage::put 保存文件,但它总是保存一个空图像文件,我不明白为什么。我尝试保存的文件是 base64 编码的。

这是我的代码:

  $image = str_replace('data:image/png;base64,', '', $file);
  $image = str_replace(' ', '+', $image);
  $decodedFile = base64_decode($image);


  // Image Size
  $size = strlen($decodedFile);

  // Image Mime Type
  $f = finfo_open();
    $mimeType = finfo_buffer($f, $decodedFile, FILEINFO_MIME_TYPE);
  finfo_close($f);

  // Extension
  $extension = explode('.', $filename)[1];
  $error = null;
  $test = $public;

  // Save file locally
  Storage::put('tmp/temporary', $decodedFile);

  $object = new UploadedFile($url, $filename, $mimeType, $size, $error, $test);

这是我得到的结果,大小始终为 0

UploadedFile {#307 ▼
-test: false
-originalName: "wassho-omni-shoreham-hotel-marquee-lounge.jpg"
-mimeType: "image/png"
-size: 185463
-error: 0
path: "na_source/public/storage/tmp"
filename: "temporary"
basename: "temporary"
pathname: "na_source/public/storage/tmp/temporary"
extension: ""
realPath: "na_source/storage/app/public/tmp/temporary"
aTime: 2017-10-19 21:59:45
mTime: 2017-10-19 21:03:12
cTime: 2017-10-19 21:59:07
inode: 11166493
size: 0
perms: 0100644
owner: 1000
group: 1000
type: "file"
writable: true
readable: true
executable: false
file: true
dir: false
link: false
}

有人知道我在这里做错了什么吗?

【问题讨论】:

  • 什么是$file?文件内容?
  • $file 是base64编码的文件内容
  • 我自己现在有点在存储方面苦苦挣扎,所以只是大喊我的想法:$size > 0 I guess?, $public = false??也许使用一个扩展,任何,使它看起来不像一条路径?
  • Storage::putUploadedFile 是否指向同一个文件?
  • @ljubadr 是的,他们这样做,我暂时保存文件,然后使用 UploadedFile 对象中的 url 路径,这不是我可以在这里做的吗?

标签: php image laravel base64 laravel-storage


【解决方案1】:

最后,我并不完全清楚为什么,而是将 Storage::put 函数与 file_put_contents($url, $decodedFile);函数解决了这个问题,它使用上面的代码顺利保存了文件。

【讨论】:

    【解决方案2】:

    你的逻辑不正确。因为它是针对 PNG 图像进行硬编码的。

    $image = str_replace('data:image/png;base64,', '', $file);
    

    您可以使用下面的行来代替。

    $tempImage = explode(",",$file);
    $image_data = base64_decode($tempImage[1]);
    
    $file_name = "getYourFileName.PNG";
    //After decoding from base64. you can save it using 
    
    File::put('tmp/temporary/' . $file_name , $image_data);
    

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 2015-11-05
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 2017-08-19
      相关资源
      最近更新 更多