如何 abort/stop 正在上传 Amazon AWS s3
How to abort/stop an Amazon AWS s3 upload in progress
我正在使用 javascript 版本的 aws sdk 将文件上传到 amazon s3 存储桶。
代码:
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);
}
});
}
});
虽然文件正在成功上传部分文件并且仍在进行中,但我想abort/stop上传文件。
我试过了:
bucket.abort();// not working
bucket.abort.bind(bucket); //not working.
感谢您的帮助。
您不能从您的 S3 对象 bucket
进行绑定,上传部分必须调用它。
像这样改变
var upload = bucket.upload(params)
upload.send(....)
这样你就可以像
一样在上传时绑定
upload.abort.bind(upload);
您可以在 example
中调用超时方法
// abort request in 1 second
setTimeout(upload.abort.bind(upload), 1000);
找到解决方案:
// replaced bucket.upload() with bucket.putObject()
var params = {Key: file.name, ContentType: file.type, Body: file};
request = bucket.putObject(params);
然后中止请求:
abort: function(){
request.abort();
}
在浏览器环境中调用 abort() 不会中止任何已经在进行中的请求。如果创建了分段上传,则不会发送任何尚未上传的分段,并清理分段上传。
零件尺寸的默认值为 (5 * 1024 * 1024)
由于运气不佳,我偶然发现了一种针对分段上传执行此操作的方法。
已接受的答案强制您使用 putObject
方法,该方法不会分块上传并使用分段上传 API.
发送它们
以下解决方案在浏览器中使用 Javascript 的 AWS S3 SDK 的 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 没有记录这一点。
我正在使用 javascript 版本的 aws sdk 将文件上传到 amazon s3 存储桶。
代码:
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);
}
});
}
});
虽然文件正在成功上传部分文件并且仍在进行中,但我想abort/stop上传文件。
我试过了:
bucket.abort();// not working
bucket.abort.bind(bucket); //not working.
感谢您的帮助。
您不能从您的 S3 对象 bucket
进行绑定,上传部分必须调用它。
像这样改变
var upload = bucket.upload(params)
upload.send(....)
这样你就可以像
一样在上传时绑定upload.abort.bind(upload);
您可以在 example
中调用超时方法// abort request in 1 second
setTimeout(upload.abort.bind(upload), 1000);
找到解决方案:
// replaced bucket.upload() with bucket.putObject()
var params = {Key: file.name, ContentType: file.type, Body: file};
request = bucket.putObject(params);
然后中止请求:
abort: function(){
request.abort();
}
在浏览器环境中调用 abort() 不会中止任何已经在进行中的请求。如果创建了分段上传,则不会发送任何尚未上传的分段,并清理分段上传。
零件尺寸的默认值为 (5 * 1024 * 1024)
由于运气不佳,我偶然发现了一种针对分段上传执行此操作的方法。
已接受的答案强制您使用 putObject
方法,该方法不会分块上传并使用分段上传 API.
以下解决方案在浏览器中使用 Javascript 的 AWS S3 SDK 的 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 没有记录这一点。