直接上传分块文件到Amazon S3

3

我正在寻找上传到Amazon s3的直接示例,可以分块上传而无需任何服务器端处理(除了签署请求)。

我已经研究了许多选项,到目前为止,所有示例都只涉及从服务器分块或仅将单个put发送到浏览器中的s3,或者太旧了不再适用。

最高的希望是Plupload,但我找不到任何关于将大文件拆分为块的文档,至少在亚马逊示例中没有。

最终目标是在5秒内将500mb文件发送到s3。使用php服务器,我能够接近10秒,但客户想要避免完全使用服务器处理并直接进入s3,所以这些是我受限制的规则。

我发现Amazon文档非常复杂和难以理解。是否有人知道浏览器分块到s3的完整示例?

Plupload设置的基本思路:

$("#uploader").plupload({
    runtimes : 'html5,flash,silverlight',
    url : 'http://<?php echo $bucket; ?>.s3.amazonaws.com/',

    multipart: true,
    multipart_params: {
        'key': '${filename}', // use filename as a key
        'Filename': '${filename}', // adding this to keep consistency across the runtimes
        'acl': 'public-read',
        'Content-Type': 'Binary/Octet-Stream',
        'AWSAccessKeyId' : '<?php echo $accessKeyId; ?>',       
        'policy': '<?php echo $policy; ?>',
        'signature': '<?php echo $signature; ?>',
        'Multiple_queues': True,
    },
    file_data_name: 'file',
    filters : {
        // Maximum file size (apparently not per chunk)
        max_file_size : '5mb',
    },
    flash_swf_url : '../js/Moxie.swf',
    silverlight_xap_url : '../js/Moxie.xap'
});

看起来multipart不是指多个块,而是可能指总共多个文件。 不确定,我只需要发送一个。

感谢任何意见。


只是想澄清一下...您希望从客户端(用户的)计算机还是从服务器发送文件到S3?如果是后者,您是否查看了AWS SDK for PHP中的Transfer?它支持多部分上传。 - John Rotenstein
从客户端发起。标准 AWS 库可以直接处理服务器传输,但不方便地忽略了来自客户端的分块。 - Kai Qing
是的,我已经阅读了亚马逊文档,enzam链接是我在帖子中参考的一个链接,但现在已经失效了。我目前正在研究使用jquery文件库的内容:https://github.com/eddturtle/direct-upload-s3-signaturev4 - 但是我没有看到任何并发传输的证据。它是分块的,只是单个文件发送,而不是并发批处理。 - Kai Qing
1个回答

1

Plupload支持分块上传,所以您只需要正确配置它:

var uploader = new plupload.Uploader({
    browse_button: 'browse', // this can be an id of a DOM element or the DOM element itself
    url: 'upload.php',
    chunk_size: '200kb',
    max_retries: 3
});

上述配置的最后两行将设置分块。

这个问题已经过时并且不再必要。客户选择了其他方案。但是,如果您想更新答案并提供一个好的代码片段 - 以防链接失效 - 我可以接受这个作为答案。 - Kai Qing
代码片段已添加。请参见上方。 - JCL1178

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接