teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

一部訂正します。

2020/07/09 00:16

投稿

mix-peach
mix-peach

スコア1910

answer CHANGED
@@ -7,25 +7,75 @@
7
7
  laravelの中身を少し掘り下げて確認しましたが、```putFile```の、第二引数に渡せるのは、
8
8
 
9
9
  ①Fileクラス or UploadedFileクラスのインスタンス
10
- ②リソース
10
+ ~~②リソース~~
11
11
  ③ファイルパス(テキスト)
12
12
 
13
13
  のいずれか。。だと思われます。
14
14
 
15
15
  ご提示のコードで、```$canvas```はバイナリ文字列だと思うので、上記のどれにも該当しないのですが、
16
- 内部のフローが
17
16
 
18
- ```php
17
+ ~~内部のフローが
19
18
  if ($contents instanceof File ||
20
19
  $contents instanceof UploadedFile) {
21
20
  return $this->putFile($path, $contents, $options);
22
21
  }
23
-
24
22
  return is_resource($contents)
25
23
  ? $this->driver->putStream($path, $contents, $options)
26
24
  : $this->driver->put($path, $contents, $options);
25
+ こうだったので、
26
+ ①にも②にも該当しない```$canvas```を、ファイルパスとして処理しようと試みた結果のエラー・・・
27
+ ではないでしょうか。~~
28
+
29
+
30
+ ----
31
+
32
+ すみません。。
33
+ 手元にあったS3用ライブラリを入れていた環境のlaravelがちょっと古いバージョン(5.8くらいだった・・)でして、
34
+ そこでFileSystemの内部処理を見ていたことが裏目に出たようです。
35
+ laravel6あたりから、この内部処理がけっこう変わっていたことに気づかず、
36
+ 勘違いをしてしまいました。。。
37
+
38
+ ということで、一部訂正します。
39
+
40
+
41
+ putFileを見てみると、
42
+
43
+ ```php
44
+ public function putFile($path, $file, $options = [])
45
+ {
46
+ $file = is_string($file) ? new File($file) : $file;
47
+
48
+ return $this->putFileAs($path, $file, $file->hashName(), $options);
49
+ }
27
50
  ```
28
51
 
29
- こうったので、
52
+ こうていまし
53
+ バイナリ文字列は、```is_string()```が```true```になるので、
54
+ Fileクラスに渡されており、そのFileクラスの初期処理で
55
+
56
+ ```
57
+ public function __construct(string $path, bool $checkPath = true)
58
+ {
59
+ if ($checkPath && !is_file($path)) {
60
+ throw new FileNotFoundException($path);
61
+ }
62
+
63
+ parent::__construct($path);
64
+ }
65
+ ```
66
+ こう。。
67
+ エラー表示された ```is_file()```が出てきました。。
68
+ つまり、ここでエラーになっているということになります。
69
+ (若干エラーの出し方が、laravelの意図した形にはなっていないようには見えますが)
70
+
30
- ①にも②にも該当しない```$canvas```を、ファイルパスして処理しよと試みた結果のエラー・・・
71
+ ので、怒られてる原因は、第2引数```$canvas```であるこは、間違いなさそです。
72
+
73
+ これらのコードを見る限り、第2引数に渡せるのは
74
+
75
+ ①Fileクラス or UploadedFileクラスのインスタンス
76
+ ③ファイルパス(テキスト)
77
+
78
+ の二択・・?(かの確信はない^^;)
79
+
80
+ 少なくとも、```->hashName()```でエラーにならないクラスインスタンス等でなければ、
31
- はないでしょ
81
+ この先の処理に進めない、といことです