是否可以通过 ngFileUpload post 将 base64 图像发送到 amazon s3 存储桶?
Is it possible to send base64 image to an amazon s3 bucket via ngFileUpload post?
我有一个工作脚本,当文件输入发生变化时,选择文件,在我的 django 后端签署他们的上传数据,然后从前端直接上传到我的 s3 存储桶。它工作得很好。我正在使用 ng-file-upload 来完成它。
var doSignUrl = function(image, success, error){
$http({
url: scope.signUrl,
params: {
s3_object_name: image.name,
s3_object_type: image.type
},
method: 'get'
}).success(success).error(error);
};
var getUploadConfig = function(image, data){
return {
url: data.url,
method: 'POST',
fields : {
key: data.path,
AWSAccessKeyId: data.aws_access_key_id,
acl: data.acl,
policy: data.policy,
signature: data.signature,
"Content-Type": image.type != '' ? image.type : 'application/octet-stream',
filename: data.file_name
},
file: image,
};
};
var doUpload = function(image){
doSignUrl(image, function(signData){
Upload.upload(getUploadConfig(image, signData)).progress(function(e){
doProgress(image, parseInt(100.0 * e.loaded / e.total))
}).success(function(data, status, header, config){
doSuccess(image, signData.url+'/'+signData.path);
}).error(function(data, status, header, config){
doError(image);
});
}, function(data, status, header, config){
console.log(status);
console.log(data);
});
}
对于文件选择器选择的每个文件,我调用 doUpload(file)
但我真正的 objective 是在上传前使用 canvas 在前端裁剪图像。问题是,当您使用 canvas 裁剪图像时,结果是 base64 编码图像,而不是文件。所以我的最后一个问题是:是否可以将此 base64 图像直接上传到 s3?
经过大量研究,我发现您可以将 blob 而不是 unsing ngFileUpload 文件发送到 s3。
我使用this library将我的base64转换为blob,然后在Upload.upload()
文件参数中传递生成的blob而不是文件。
我有一个工作脚本,当文件输入发生变化时,选择文件,在我的 django 后端签署他们的上传数据,然后从前端直接上传到我的 s3 存储桶。它工作得很好。我正在使用 ng-file-upload 来完成它。
var doSignUrl = function(image, success, error){
$http({
url: scope.signUrl,
params: {
s3_object_name: image.name,
s3_object_type: image.type
},
method: 'get'
}).success(success).error(error);
};
var getUploadConfig = function(image, data){
return {
url: data.url,
method: 'POST',
fields : {
key: data.path,
AWSAccessKeyId: data.aws_access_key_id,
acl: data.acl,
policy: data.policy,
signature: data.signature,
"Content-Type": image.type != '' ? image.type : 'application/octet-stream',
filename: data.file_name
},
file: image,
};
};
var doUpload = function(image){
doSignUrl(image, function(signData){
Upload.upload(getUploadConfig(image, signData)).progress(function(e){
doProgress(image, parseInt(100.0 * e.loaded / e.total))
}).success(function(data, status, header, config){
doSuccess(image, signData.url+'/'+signData.path);
}).error(function(data, status, header, config){
doError(image);
});
}, function(data, status, header, config){
console.log(status);
console.log(data);
});
}
对于文件选择器选择的每个文件,我调用 doUpload(file)
但我真正的 objective 是在上传前使用 canvas 在前端裁剪图像。问题是,当您使用 canvas 裁剪图像时,结果是 base64 编码图像,而不是文件。所以我的最后一个问题是:是否可以将此 base64 图像直接上传到 s3?
经过大量研究,我发现您可以将 blob 而不是 unsing ngFileUpload 文件发送到 s3。
我使用this library将我的base64转换为blob,然后在Upload.upload()
文件参数中传递生成的blob而不是文件。