我使用预先签名的网址直接浏览器上传以允许文件上传。到目前为止我正在使用
$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
答案 0 :(得分:2)
亚马逊是否有可能检查它是否是“有效”的图像?(即不是 只是扩展)。
不,这是不可能的
如果无法实现,我该怎么做才能确保用户只上传 图片。我需要直接上传到s3而不是使用 一些在线验证,然后将其代理到s3
你做不到。您直接上传到S3并根据文件内容限制用户上传的要求不兼容。其中一项要求需要改变。
如果您可以等到文件上传到S3以验证它,那么您可以使用S3通知来触发Lambda函数来验证文件。但是,此时文件已经上传,浏览器会认为上传成功了。
答案 1 :(得分:0)
你不能,因为S3是一个存储库,没有类型验证器内置。
你可以投入一个前端java applet加载器进行加载,然后它将使用用户CPU进行任何验证并检查你。
尽管如此,如果没有“内容长度范围”限制,S3中的任何内容都会被滥用。用户可以简单地注入图像标题来欺骗上传者并“借用”S3空间的GB。 XD。
另一个有趣的事实是,内容长度范围,最强大的文件验证器之一是防病毒引擎文件扫描程序。 ;-D。