尝试使用AWS JS SDK上传mp4文件并启动多部分上传,当我尝试下载并在本地播放时,我不断收到文件损坏错误。
我的代码要点:
>
使用以下参数启动多部分上载:
const createMultipartUploadParams = {
Bucket: bucketname,
Key: fileHash.file_name,
ContentType: 'video/mp4' // TODO: Change hardcode
};
打电话:
s3Instance.createMultipartUpload(createMultipartUploadParams, function(err, data) {
}
执行分块:参数:
const s3ChunkingParams = {
chunkSize,
noOfIterations,
lastChunk ,
UploadId: data.UploadId
}
读取文件:
const reader = new FileReader();
reader.readAsArrayBuffer(file)
上传每个区块:
reader.onloadend = function onloadend(){
console.log('onloadend');
const partUploadParams = {
Bucket: bucketname,
Key: file_name,
PartNumber: i, // Iterating over all parts
UploadId: s3ChunkingParams.UploadId,
Body: reader.result.slice(start, stop) // Chunking up the file
};
s3Instance.uploadPart(partUploadParams, function(err, data1) {
}
最后完成multipartUpload:
s3实例。completeMultipartUpload(完成MultipartParams,函数(错误,数据)
我猜问题是我如何读取文件,所以我尝试将其内容编码为base64,但这使得文件的大小异常巨大。非常感谢您的帮助!
这个也试过了
唯一可能损坏的是,也许您正在为各个部分上传额外的填充内容,这基本上会导致最终对象出错。我不相信S3在这里做了一些可疑的事情。
您可以在上传文件后验证对象的最终大小,如果它与您的本地副本不匹配,那么您知道您在某个地方有问题。
您是否正在尝试从浏览器上传?
或者,您可以查看-https://github.com/minio/minio-js.它有最少的抽象API实现最常用的S3调用集。
这是一个用于流式上传的nodejs示例。
$ npm install minio
$ cat >> put-object.js << EOF
var Minio = require('minio')
var fs = require('fs')
// find out your s3 end point here:
// http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region
var s3Client = new Minio({
url: 'https://<your-s3-endpoint>',
accessKey: 'YOUR-ACCESSKEYID',
secretKey: 'YOUR-SECRETACCESSKEY'
})
var outFile = fs.createWriteStream('your_localfile.zip');
var fileStat = Fs.stat(file, function(e, stat) {
if (e) {
return console.log(e)
}
s3Client.putObject('mybucket', 'hello/remote_file.zip', 'application/octet-stream', stat.size, fileStream, function(e) {
return console.log(e) // should be null
})
})
EOF
putObject() 这里是一个完全托管的单函数调用,用于超过5MB的文件大小,它会自动在内部执行多部分操作。您也可以恢复失败的上传,它将通过验证先前上传的段从中断处开始。
因此,您不必经历编写低级别多部分调用的麻烦。
此外,这个库也是同构的,也可以在浏览器中使用。
使用AWS SDK PHP v2将文件上载到Amazon S3时,我在设置“Metadata”选项时遇到问题。我正在阅读的upload()方法的文档说明,第5个参数是一组选项。。。 *$options 执行命令时使用的自定义选项: - 参数:用于上传的自定义参数。这些参数必须映射到“启动多个部分上传”操作参数。- min_part_size:执行分段上传时允许每个上传的分段的最小大小。- 并发:最
问题内容: 我正在使用NodeJS AWS开发工具包生成预签名的S3 URL。该文档提供了一个生成预签名URL的示例。 这是我的确切代码(省略了敏感信息): 生成的URL如下所示: 我正在将该URL复制到浏览器中,并得到以下响应: 我知道水桶存在。当我通过AWS Web GUI导航至该项目并双击时,它会打开带有URL的对象,并且工作正常: 因此,我被认为是我使用SDK的方式一定做错了。 问题答案:
我正在尝试使用 AWS PHP 开发工具包将一个 30 GB 的文件上传到亚马逊 S3。 它适用于最大7GB的文件。上传30 GB文件时,脚本运行约2小时后,我收到以下错误: 将部件上载到多部件上载时发生异常。以下部分出错:-第5部分:在上执行“UploadPart”时出错https://s3.amazonaws.com/Server3-27-SEP-2015/S3_www_1443369605.
我用的是fs。readFile读取大约700KB的本地mp4文件,AWS SDK将文件加载到我的S3存储桶中。这个过程是可行的,但文件已损坏,可能是因为S3上生成的文件大小仅为500KB左右而被截断。 我使用的代码可以很好地处理图像。只是不适用于mp4文件。这是我的代码: 我已尝试从params对象中省略ContentEncoding和/或ContentType属性。 编辑: 因此,当我conso
问题内容: 是否有人成功使用AWS开发工具包为S3存储桶中的对象生成签名URL,该URL也可以在CloudFront上运行?我使用的是JavaScriptAWS开发工具包,通过S3链接生成签名的URL非常简单。我刚刚创建了一个私有存储桶,并使用以下代码生成URL: 这很好用,但我也想向用户公开一个CloudFront URL,以便他们可以提高使用CDN的下载速度。我设置了一个CloudFront发
我试图使用API接口将视频上传到S3存储桶,我遵循了预签名的URL过程,下面是我的lambda函数,它返回预签名的URL(它正确地返回了预签名的URL,看起来): 当我尝试上传一个像这样卷曲的mp4视频时,例如: curl-X PUT-F'data=@ch01_00000100055009702.mp4'https://redacted-bucket-instance.s3.amazonaws.c