web-dev-qa-db-ja.com

Laravel 5.3 Storage :: putはファイル名でディレクトリを作成します

Laravelのファイルストレージ機能を使用してファイルを保存しています。

public function dataPost(Request $request) {

    $fileInForm = 'doc';

    if ($request->hasFile($fileInForm)) {

        $file = $request->file($fileInForm);
        if ($file->isValid()) {

            // Filename is hashed filename + part of timestamp
            $hashedName = hash_file('md5', $file->path());
            $timestamp = microtime() * 1000000;

            $newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();

            Storage::disk('local')->put($newFilename, $file);
        }
    }
}

これによりファイルは保存されますが、ファイルと同じ名前のディレクトリ内に保存されます。次に例を示します。

storage/app/952d6c009.jpg/952d6c009.jpg

または

storage/app/234234234.jpg/234234234.jpg

これは予想されますか?ファイルごとに個別のディレクトリなしでファイルを保存する方法はありますか?

ありがとう!

16
zundi

ファイルオブジェクトではなく、2番目の引数でファイルの内容を指定する必要があります。これを試してください。

Storage::disk('local')->put($newFilename, file_get_contents($file));

29
ABDEL-RHMAN

これは、ファイル名として保存するディレクトリを指定したために発生しました。 newFilenameは、「images」などのディレクトリ名にする必要があります。この行を参照してください

Storage::disk('local')->put($newFilename, $file);

これを次のように変更できます

Storage::disk('local')->putFile('images', $file);

次に、storage/app/images/234234234.jpgに保存されているパスを取得します

3
xmhafiz
Storage::disk('local')->putFileAs('', $file, $filenewname);
2
AK Coders

$ fileはエンコードされています。ファイルをエンコード解除する必要があります。

Storage :: disk( 'local')-> put($ newFilename、File :: get($ file));

0
Abid Shah