区块直接上传到s3 jquery文件上传,只保存最后一个区块
我使用这个插件直接从JS客户端代码上传文件到AWSS3。我使用了多部分上传。以下是文件上载的设置:区块直接上传到s3 jquery文件上传,只保存最后一个区块,jquery,file-upload,amazon-s3,blueimp,Jquery,File Upload,Amazon S3,Blueimp,我使用这个插件直接从JS客户端代码上传文件到AWSS3。我使用了多部分上传。以下是文件上载的设置: 多部分:正确, maxChunkSize:10*1024*1024, 自动上传:对, 当我使用此事件侦听器记录响应时:“fileuploadchunkdone”我可以看到所有已上载的区块,但在bucket中只保存最后一个区块。此外,当我在上传过程中观察我的bucket时,我可以看到文件大小等于块大小,但上传后文件的完整大小等于最后一个块大小,并且文件已损坏 我做错什么了吗?或者这是个虫子 以下
多部分:正确,
maxChunkSize:10*1024*1024,
自动上传:对,
当我使用此事件侦听器记录响应时:“fileuploadchunkdone”
我可以看到所有已上载的区块,但在bucket中只保存最后一个区块。此外,当我在上传过程中观察我的bucket时,我可以看到文件大小等于块大小,但上传后文件的完整大小等于最后一个块大小,并且文件已损坏
我做错什么了吗?或者这是个虫子
以下是我的S3设置:
CORS:
*
得到
邮递
放
删除
3000
埃塔格
内容类型
内容范围
内容配置
x-amz-acl
x-amz-meta-qqfilename
x-amz-date
授权
*
谢谢你的帮助
更新:
下面是我用于此目的的js代码:
$('.upload-video-part').each(function(){
var that = this;
var videoId;
$(this).fileupload({
sequentialUploads: true,
multipart: true,
disableValidation: true,
maxChunkSize: 10 * 1024 * 1024,
autoUpload: true,
add: function (event, data) {
$(that).find('input[type=file]').hide();
$(that).find('#progress').show();
$.ajax({
url: "/uploaded_videos",
type: 'POST',
dataType: 'json',
data: {doc: {title: data.files[0].name}},
async: false,
success: function(retdata) {
$(that).find('input[name=key]').val(retdata.key);
$(that).find('input[name=policy]').val(retdata.policy);
$(that).find('input[name=signature]').val(retdata.signature);
$(that).parent().append('<div id="video-edit-form-' + retdata.id + '"></div>');
videoId = retdata.id;
data.submit();
$.get({
url: "/edit_after_upload?id=" + videoId,
success: function(data) {
$('#edit_uploaded_video_' + retdata.id).submit(function(e, data){
e.preventDefault();
var messageArea = $('#edit_uploaded_video_' + retdata.id).find('.message-area')[0];
$.ajax({
type: 'PUT',
url: $('#edit_uploaded_video_' + retdata.id).attr('action'),
data: $('#edit_uploaded_video_' + retdata.id).serialize(),
success: function(data) {
$(messageArea).css('color', 'rgba(0, 255, 0, .5');
messageArea.innerHTML = 'Video was successfuly saved!';
$(messageArea).css('display', 'inline-block');
},
error: function(err){
$(messageArea).css('color', 'rgba(255, 0, 0, .5');
messageArea.innerHTML = err.responseJSON.errors;
$(messageArea).css('display', 'inline-block');
}
});
return false;
});
}
});
}
});
},
send: function(e, data) {},
fail: function(e, data) {
$(that).find('.fileinput-button span')[0].innerHTML = 'Video uploading failed';
$(that).find('#progress .bar').css('background', 'red');
},
done: function (event, data) {
$(that).find('.fileinput-button span')[0].innerHTML = 'Video successfully uploaded';
$(that).find('#progress .bar').css('background', 'green');
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$(that).find('#progress .bar').css( 'width', progress + '%');
}
}).on('fileuploadchunksend', function (e, data) {});
});
$('.upload video part')。每个(函数(){
var=这个;
视频识别码;
$(此).fileupload({
顺序上传:正确,
多部分:正确,
disableValidation:正确,
maxChunkSize:10*1024*1024,
自动上传:对,
添加:功能(事件、数据){
$(that.find('input[type=file]').hide();
$(that.find(“#progress”).show();
$.ajax({
url:“/上传的视频”,
键入:“POST”,
数据类型:“json”,
数据:{doc:{title:data.files[0].name},
async:false,
成功:函数(retdata){
$(that.find('input[name=key]').val(retdata.key);
$(that.find('input[name=policy]').val(retdata.policy);
$(that.find('input[name=signature]').val(retdata.signature);
$(that.parent().append(“”);
videoId=retdata.id;
data.submit();
美元({
url:“/edit\u after\u upload?id=“+videoId,
成功:功能(数据){
$(编辑上传的视频+retdata.id)。提交(函数(e,数据){
e、 预防默认值();
var messageArea=$('#编辑上传的视频'+retdata.id)。查找('.message area')[0];
$.ajax({
键入:“PUT”,
url:$('#编辑上传的视频'+retdata.id).attr('action'),
数据:$('#编辑上传的视频'+retdata.id).serialize(),
成功:功能(数据){
css('color','rgba(0,255,0,5');
messageArea.innerHTML='视频已成功保存!';
$(messageArea).css('display','inlineblock');
},
错误:函数(err){
css('color','rgba(255,0,0,5');
messageArea.innerHTML=err.responseJSON.errors;
$(messageArea).css('display','inlineblock');
}
});
返回false;
});
}
});
}
});
},
send:函数(e,data){},
失败:功能(e,数据){
$(即).find('.fileinput按钮span')[0].innerHTML='Video Upload failed';
$(that.find('#progress.bar').css('background','red');
},
完成:功能(事件、数据){
$(即).find('.fileinput按钮span')[0].innerHTML='Video successfully Upload';
$(that.find('#progress.bar').css('background','green');
},
progressall:功能(e、数据){
var progress=parseInt(data.loaded/data.total*100,10);
.css('width',progress+'%');
}
}).on('fileuploadchunksend',函数(e,data){});
});
在s3中以多个块上载文件。首先使用s3 api创建多部分上载
通过此api,您将收到上载id
然后使用此api上载零件,并在数据中提供零件号和上载id
使用此api中的etag和partNumber receive来使用api_CompleteMultipartUpload完成partUpload
这肯定不是CORs相关的。如果你上传同一个部件号不止一次,S3不出错,那么你所描述的症状将是准确的预期行为,如果你有一个bug告诉你你上传的是第1部分,然后是第1部分,然后是第1部分,然后是第1部分,调用每个PAR。t“第1部分”在API请求中,而不是在第n部分中,然后发送一个只包含上一部分元数据的完成请求…这将是您的代码或您正在使用的库中的一个严重缺陷。这到底是什么库?我找不到我认为您正在使用的库的证据,实际上正在进行S3多部分上载。链接对于您正在使用的文档,可能需要您自己编辑到问题中的代码。Michael,我使用。我不确定是否可以设置每个区块的数量。谢谢。似乎我最初对您尝试执行的操作做了一些不正确的假设。S3有一个允许您上载每个“区块”的(不涉及分块编码)使用部件号,当你完成后,你发送回每个上传部件的etag,S3将它们组合成一个对象…这不是你正在做的。我不清楚你所做的是否符合该模块和S3接口的设计意图。请展示你的代码。
$('.upload-video-part').each(function(){
var that = this;
var videoId;
$(this).fileupload({
sequentialUploads: true,
multipart: true,
disableValidation: true,
maxChunkSize: 10 * 1024 * 1024,
autoUpload: true,
add: function (event, data) {
$(that).find('input[type=file]').hide();
$(that).find('#progress').show();
$.ajax({
url: "/uploaded_videos",
type: 'POST',
dataType: 'json',
data: {doc: {title: data.files[0].name}},
async: false,
success: function(retdata) {
$(that).find('input[name=key]').val(retdata.key);
$(that).find('input[name=policy]').val(retdata.policy);
$(that).find('input[name=signature]').val(retdata.signature);
$(that).parent().append('<div id="video-edit-form-' + retdata.id + '"></div>');
videoId = retdata.id;
data.submit();
$.get({
url: "/edit_after_upload?id=" + videoId,
success: function(data) {
$('#edit_uploaded_video_' + retdata.id).submit(function(e, data){
e.preventDefault();
var messageArea = $('#edit_uploaded_video_' + retdata.id).find('.message-area')[0];
$.ajax({
type: 'PUT',
url: $('#edit_uploaded_video_' + retdata.id).attr('action'),
data: $('#edit_uploaded_video_' + retdata.id).serialize(),
success: function(data) {
$(messageArea).css('color', 'rgba(0, 255, 0, .5');
messageArea.innerHTML = 'Video was successfuly saved!';
$(messageArea).css('display', 'inline-block');
},
error: function(err){
$(messageArea).css('color', 'rgba(255, 0, 0, .5');
messageArea.innerHTML = err.responseJSON.errors;
$(messageArea).css('display', 'inline-block');
}
});
return false;
});
}
});
}
});
},
send: function(e, data) {},
fail: function(e, data) {
$(that).find('.fileinput-button span')[0].innerHTML = 'Video uploading failed';
$(that).find('#progress .bar').css('background', 'red');
},
done: function (event, data) {
$(that).find('.fileinput-button span')[0].innerHTML = 'Video successfully uploaded';
$(that).find('#progress .bar').css('background', 'green');
},
progressall: function (e, data) {
var progress = parseInt(data.loaded / data.total * 100, 10);
$(that).find('#progress .bar').css( 'width', progress + '%');
}
}).on('fileuploadchunksend', function (e, data) {});
});