2014-12-28 101 views
3

解決:使用這個帖子:http://www.designedbyaturtle.co.uk/2013/direct-upload-to-s3-with-a-little-help-from-jquery/上傳文件到Amazon S3直接用PHP

編輯:我在尋找一種方式來直接上傳來自客戶端的一個大的zip文件到Amazon S3,而不首先將其上傳到我的服務器

我正在爲我的web應用程序使用laravel框架的小型服務器 我有一些用戶試圖將大文件上傳到我的服務器(大約300-400米),而我的服務器很弱,我的帶寬是對於用戶能夠完成上傳而言是低的。

我想要的文件從瀏覽各地直接上傳到Amazon S3, 我不認爲這是可以與laravel SDK不亞馬遜

我安裝了官方的SDK ,我試圖做到這一點像建議在這個崗位 uploading posted file to amazon s3

但不團結知道如何真正把我的文件到Amazon S3, 我應該怎麼放instad「你的文件的字符串這裏」:

$result = $client->upload(
'BUCKET HERE', 
'OBJECT KEY HERE', 
'STRING OF YOUR FILE HERE', 
'public-read' // public access ACL 
); 

即時得到我的文件是這樣的:

$myFile = Input::file('file'); 

將$ myfile的,而不是「在這裏你的文件的字符串」不工作

+1

你試過'$ myFile-> getRealPath()' – lukasgeiter

+0

我實際得到$ myfile作爲一個數組,因爲它可能是多個文件uploades,但無論如何,$ myFile [0] - > getRealPath有一個值布爾(假),我不認爲它是假設有,並試圖發送給出資源類型無效。我嘗試manuualy把路徑放到我的服務器上的一個文件,它不起作用,只是把s3放在一個文件的路徑作爲它的內容 –

+0

這很奇怪,'getRealPath()'工作不正常。無論如何。嘗試使用file_get_contents('path-to-your-file')'作爲文件的字符串 – lukasgeiter

回答

1

您可以從客戶端向S3直接上傳文件,但它是一個安全風險,因爲您無法驗證文件,並且允許任何人訪問您的S3存儲桶通常是一個糟糕的主意。我仍然會通過您的Laravel應用程序查看上傳內容。

上傳到PHP所有文件都存儲在服務器上,最有可能在/tmp目錄Linux和Mac機。沒有辦法避免這種情況,文件需要存儲在某個地方。您使用Input::file('file')獲取表示文件的對象。

該文件的Symfony\Component\HttpFoundation\File\UploadedFile一個實例,其公開了一個方法getRealPath()。然後,我們可以使用fopen()以字符串形式讀取文件的內容。所以把它上傳到S3,使用方法:解決:使用這個帖子:

$client->upload(
    'bucket', 
    'key', 
    fopen($file->getRealPath(), 'r'), 
    'public-read', 
);