中止/停止亚马逊aws s3上传,aws sdk javascript

时间:2015-12-23 06:35:54

标签: javascript amazon-web-services file-upload amazon-s3 aws-sdk-js

我正在使用aws sdk javascript在亚马逊s3上传文件。

代码:

add_theme_support( 'woocommerce' );

文件上传成功,我要中止/停止文件上传 使用:

AWS.config.update({
                accessKeyId : 'access-key',
                secretAccessKey : 'secret-key'
            });
            AWS.config.region = 'region';
            var bucket = new AWS.S3({params: {Bucket: 'bucket-name'}});
            //var fileChooser = document.getElementById('file');
            var files = event.target.files;
            $.each(files, function(i, file){
            //console.log(file.name);
                if (file) {
                    var params = {Key: file.name, ContentType: file.type, Body: file};
                    bucket.upload(params).on('httpUploadProgress', function(evt) {
                        console.log("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%');
                        if("Uploaded :: " + parseInt((evt.loaded * 100) / evt.total)+'%' == 'Uploaded :: 20%'){
                            console.log("abort upload");
                            bucket.abort.bind(bucket);
                        }
                    }).send(function(err, data) {
                        if(err != "null"){
                            console.log(data);
                            //alert("Upload Success \nETag:"+ data.ETag + "\nLocation:"+ data.Location);
                            var filename = data.Location.substr(data.Location.lastIndexOf("/")+1, data.Location.length-1);
                            console.log(filename);
                            fileData = filename;
                            filename = filename.replace("%20"," ");
                            $('.aws-file-content').append('<i id="delete-aws-file'+i+'" class="delete-aws-file icon-remove-sign"  data-filename=' + fileData +'></i><a href="'+data.Location+'" target=_blank >'+filename+'</a><br>');
                        }else{
                            console.log(err);
                        }
                    });
                }
            });

感谢您的帮助。

4 个答案:

答案 0 :(得分:5)

找到解决方案:

// replaced bucket.upload() with bucket.putObject()
var params = {Key: file.name, ContentType: file.type, Body: file};
request = bucket.putObject(params);

然后中止请求:

abort: function(){
            request.abort();
        }

答案 1 :(得分:1)

您无法从作为S3对象的@page { background: url("abc.jpg") repeat; } 进行绑定,必须为上传部分调用它。

改变这样的事情

bucket

所以你可以绑定上传,如

var upload = bucket.upload(params)
upload.send(....)

您可以在example

中加注超时方法
upload.abort.bind(upload);

答案 2 :(得分:0)

在浏览器环境中调用abort()不会中止任何已在飞行中的请求。如果创建了分段上传,则不会发送任何尚未上传的部分,并且将清理分段上传。

零件尺寸的默认值为(5 * 1024 * 1024)

答案 3 :(得分:0)

通过愚蠢的运气我偶然发现了一种方法来进行分段上传。接受的答案会强制您使用putObject方法,该方法不会上传并使用分段上传API发送它们。以下解决方案在浏览器中使用AWS S3 SDK for Javascript的s3.upload方法。它似乎工作得很好,即使官方文档中的例子不起作用。

var bucket = new AWS.S3({params: {Bucket: 'bucket-name'}});
var params = {Key: file.name, ContentType: file.type, Body: file};
var bucket.upload(params).send();

setTimeout(bucket.abort, 1000);

就是这样。我只是试着打电话给bucket.abort()而且它只是起作用了。不确定为什么AWS没有记录这一点。