用php直接将文件上传到amazon s3

时间:2014-12-28 20:53:29

标签: php laravel amazon-s3

已解决:使用此帖子:http://www.designedbyaturtle.co.uk/2013/direct-upload-to-s3-with-a-little-help-from-jquery/

编辑:我正在寻找一种方法直接将大型zip文件从客户端上传到亚马逊s3,而无需先将其上传到我的服务器

我使用laravel框架为我的Web应用程序使用小型服务器 我有一些用户试图将大文件上传到我的服务器(大约300-400米),我的服务器很弱,我的带宽很低,用户无法完成上传。

我希望将文件直接上传到amazon s3, 从浏览周围我不认为这可以是laravel sdk亚马逊

我安装了官方的sdk 而且我试着按照这篇文章的建议去做 uploading posted file to amazon s3

但不能确定如何将我的文件实际发送到亚马逊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而不是您文件的'字符串'不起作用

2 个答案:

答案 0 :(得分:3)

我使用这篇文章解决了问题:已解决:使用这篇文章:http://www.designedbyaturtle.co.uk/2013/direct-upload-to-s3-with-a-little-help-from-jquery/

答案 1 :(得分:1)

您可以直接从客户端将文件上传到S3,但由于您无法验证文件,因此存在安全风险,而且任何人都可以访问您的S3存储桶通常是一个坏主意。我仍然会看看你的Laravel应用程序上传。

上传到PHP的所有文件都存储在您的服务器上,很可能存储在Linux和Mac计算机的/tmp目录中。没有办法避免这种情况,文件需要存储在某个地方。您使用Input::file('file')获取表示文件的对象。

该文件是Symfony\Component\HttpFoundation\File\UploadedFile的一个实例,它公开了getRealPath()方法。然后我们可以使用fopen()以字符串形式读取文件的内容。因此,要将其上传到S3,请使用:

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