S3仅将文件限制为某些类型

时间:2016-04-19 15:24:36

标签: php amazon-web-services amazon-s3

我使用预先签名的网址直接浏览器上传以允许文件上传。到目前为止我正在使用

    $s3 = App::make('aws')->createClient('s3');
$command = $s3->getCommand('PutObject', [
            'Bucket' => 'reminderuploadstest',
            'Key' => "test.txt",
        ]);

       echo ( (string)$s3->createPresignedRequest($command,'+100 minutes')->getUri());

我想知道如何使用此网址限制可以上传的文件类型。我希望用户只能上传图片(例如jpg,png)。 亚马逊是否有可能检查它是否有效'图像?(即不仅仅是扩展)。如果不可能,我该怎么做才能确保用户只上传图片。我需要直接上传到s3,而不是使用一些在线验证,然后将其代理到s3

2 个答案:

答案 0 :(得分:2)

  

亚马逊是否有可能检查它是否是“有效”的图像?(即不是   只是扩展)。

不,这是不可能的

  

如果无法实现,我该怎么做才能确保用户只上传   图片。我需要直接上传到s3而不是使用   一些在线验证,然后将其代理到s3

你做不到。您直接上传到S3并根据文件内容限制用户上传的要求不兼容。其中一项要求需要改变。

如果您可以等到文件上传到S3以验证它,那么您可以使用S3通知来触发Lambda函数来验证文件。但是,此时文件已经上传,浏览器会认为上传成功了。

答案 1 :(得分:0)

你不能,因为S3是一个存储库,没有类型验证器内置。

你可以投入一个前端java applet加载器进行加载,然后它将使用用户CPU进行任何验证并检查你。

尽管如此,如果没有“内容长度范围”限制,S3中的任何内容都会被滥用。用户可以简单地注入图像标题来欺骗上传者并“借用”S3空间的GB。 XD。

另一个有趣的事实是,内容长度范围,最强大的文件验证器之一是防病毒引擎文件扫描程序。 ;-D。