2017-07-25 69 views
1

我有刺蛾,輸入文件形式的極品具體名稱等Laravel - 文件和文件夾存儲功能

,如果我把POR例如,在形式,我需要:

slug = hello-how-are-you

file = header.png

file2 = home.png

Laravel創建我的文件夾中像THI存儲s:/projects/hello-how-are-youheader.pnghome.png

我嘗試,但不能做到這一點..我的東西嘗試這樣的:

public function storeProject(Request $request) 
{ 
    $project = new Project(); 
    $project->slug = $request->input("slug"); 
    $namefolder = $project->slug; 
    $project->position = $request->input("position"); 
    $project->public = $request->input("public"); 
    $header = $request->file('pathheader'); 
    $home = $request->file('pathhome'); 
    $project->pathheader = $header; 
    $project->pathhome = $home; 
    \Storage::disk('projects')->put('header.png', \File::get($header)); 
    $project->save(); 
} 

在文件系統中,我有這樣的:

'disks' => [ 

    'local' => [ 
     'driver' => 'local', 
     'root' => storage_path('app'), 
    ], 

    'public' => [ 
     'driver' => 'local', 
     'root' => storage_path('app/public'), 
     'url' => env('APP_URL').'/storage', 
     'visibility' => 'public', 
    ], 
    'projects' => [ 
     'driver' => 'local', 
     'root' => storage_path() . '/projects', 
    ], 
    's3' => [ 
     'driver' => 's3', 
     'key' => env('AWS_KEY'), 
     'secret' => env('AWS_SECRET'), 
     'region' => env('AWS_REGION'), 
     'bucket' => env('AWS_BUCKET'), 
    ], 

], 

解決了! 感謝@ Dees040 如果要粉碎的文件的名稱和做沒有一個foreach,你可以做這樣的:

public function storeProject(Request $request) 
     { 
     $project = new Project(); 
     $project->slug = $request->input("slug"); 
     $project->position = $request->input("position"); 
     $project->public = $request->input("public"); 
     $project->pathheader = $request->file('pathheader'); 
     $project->pathhome = $request->file('pathhome'); 
     \Storage::disk('projects')->makeDirectory($project->slug); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png'); 
     \Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png'); 
     $project->save(); 
     } 
+1

不'\存儲::磁盤( '項目') - >把($項目 - >蛞蝓。「/ header.png」)'工作? – apokryfos

+0

@apokryfos沒有伴侶,如果我這樣做的文件名將是你好,你是怎麼樣,youheader.png haha​​h –

+0

所以有什麼東西吞噬斜線? – apokryfos

回答

1

這可能會爲你做的伎倆:

public function storeProject(Request $request) 
{ 
    $project = Project::create($request->only('slug', 'position', 'public', 'pathheader', 'pathhome')); 

    \Storage::disk('projects')->makeDirectory($project->slug); 

    foreach ($request->allFiles() as $file) { 
     \Storage::disk('projects')->putFileAs($project->slug, $file, $file->getClientOriginalName()); 
    } 
} 

希望這有助於。

+0

嗨@ Dees040如果我這樣做,該目錄創建好,但該文件的名稱是這樣的:aisudadljlasiuaiosdiaosp328ralka.png,我以前試過它..知道如何設置一個特定的名稱? –

+0

感謝隊友。有用。我做的有點不同,因爲我不是誰將使用應用程序,所以我更喜歡粉碎文件的名稱,所以你把$文件 - > getClientoriginalName()我把'header.png'或'home.png' 。知道如何用foreach做到這一點?我認爲沒有更好。無論如何,+1! –

+0

是的,你完全可以做到這一點沒有foreach。我很高興它幫助!您可以將此答案標記爲解決方案,以便它可以幫助其他人。乾杯! –

0

首先創建的目錄:

use Illuminate\Support\Facades\Storage; 

Storage::disk('projects')->makeDirectory($namefolder); 

,然後保存文件:

$project->pathheader = Storage::disk('projects')->putFileAs($namefolder, $header, $header->getClientOriginalName()); 
$project->pathhome = Storage::disk('projects')->putFileAs($namefolder, $home, $home->getClientOriginalName()); 
+0

如果我這樣做,項目文件夾不會創建,並且該文件的名稱是aosidasdadla23232das.png .. –

+0

我忘了選擇磁盤,如果你不想要生成的唯一ID,你可以用'putFile'替換'putFileAs'我已經更新了我的答案。 –

相關問題