2015-02-10 76 views
1
從上傳的文件中獲取CDN網址

我使用的存儲提供商將文件上傳到Rackspace公司是這樣的...通過存儲

$logo = $request->file('logo'); 
$content = fopen($logo->getRealPath(), 'r+'); 

\Storage::disk('cdn')->put('logo.png', $content); 

現在,我怎麼能得到上述文件的網址是什麼?我一直在API中尋找一種方法,這似乎是不可能的。

回答

1

這裏的問題是這樣的FlySystem adapter作品。

對於大多數操作,它只會返回一個指示操作是否成功的布爾值。 即使Laravel的FlySystem包裝器也不會記錄路徑,所以解決方法是在成功上傳後自行構建路徑。

通過使用文件系統配置,我們可以想出這樣的事情:

$cdn_url = config('filesystems.disks.cdn.container').'/logo.png';

你得到的圖片。

2

我通常將磁盤公用URL存儲在config/filesystems.php文件中。例如:

'google' => [ 
     'driver'  => 's3', 
     'key'   => env('STORAGE_GOOGLE_KEY'), 
     'secret'  => env('STORAGE_GOOGLE_SECRET'), 
     'bucket'  => env('STORAGE_GOOGLE_BUCKET'), 
     'base_url'  => 'https://storage.googleapis.com', 
     'public_url' => env('STORAGE_GOOGLE_PUBLIC_URL'), 
    ], 

然後在我的模型,我定義爲包含該文件名稱的字段賦值函數:

public function getAvatarAttribute($value) 
{ 
    // If avatar isn't a URL, generate it 
    if (filter_var($value, FILTER_VALIDATE_URL) !== FALSE) { 
     return $value; 
    } else { 
     $disk = config('filesystems.default'); 
     return config('filesystems.disks.'.$disk.'.public_url').'/avatars/'.$value; 
    } 
} 

這使我:

  1. 要更改默認的磁盤在任何時候,並立即指向我的新磁盤的所有參考。
  2. 如果需要,將實際URL存儲在數據庫中。在我的情況下,頭像可能來自OAuth或實際文件上傳,所以我需要迎合兩者。