当前位置: 首页 > 知识库问答 >
问题:

使用NodeJS和AWS S3将损坏/截断的mp4上传到S3存储桶

诸修伟
2023-03-14

我用的是fs。readFile读取大约700KB的本地mp4文件,AWS SDK将文件加载到我的S3存储桶中。这个过程是可行的,但文件已损坏,可能是因为S3上生成的文件大小仅为500KB左右而被截断。

我使用的代码可以很好地处理图像。只是不适用于mp4文件。这是我的代码:

fs.readFile(file_location, function (err, data) {
    if (err) { 
        console.log('fs error': err);
    } else {
        var base64data = new Buffer(data, 'binary');

        var params = {
            Bucket: config.settings.bucket, 
            Key: 'file.mp4', 
            Body: base64data,
            ContentEncoding: 'base64',
            ContentType: 'video/mp4'
        };

        s3.putObject(params, function(err, data) {
            if (err) { 
                console.log('Error putting object on S3: ', err); 
            } else { 
                console.log('Placed object on S3: ', object_key); 
            }  
        });
    }
});

我已尝试从params对象中省略ContentEncoding和/或ContentType属性。

编辑:

因此,当我console.logfs.read文件返回的数据长度时,它总是不足。我也没有意识到我实际上没有处理bas64数据。因此,如果我使用下面的代码,我要求使用Base64读取文件,fs.read文件的data.length似乎是正确的,并且一个mp4文件显示在我的S3桶上,浏览器中有一个播放头(我之前没有得到),但是视频不会播放

fs.readFile(file_location, 'base64', function (err, data) {
    if (err) { 
        console.log('fs error': err);
    } else {
        var params = {
            Bucket: config.settings.bucket, 
            Key: 'file.mp4', 
            Body: data,
            ContentEncoding: 'base64',
            ContentType: 'video/mp4'
        };

        s3.putObject(params, function(err, data) {
            if (err) { 
                console.log('Error putting object on S3: ', err); 
            } else { 
                console.log('Placed object on S3: ', object_key); 
            }  
        });
    }
});

共有1个答案

李甫
2023-03-14

从readFile获得的data变量已经可以使用了。直接用Body: data传递即可。完全删除ContentEncode参数,因为您没有发送bas64数据。

 类似资料:
  • 我正在使用数据移动库跟踪传输数据,以便将视频(mp4)从本地计算机上载到Azure Blob存储。 这是密码。 链接中提供的示例在GetBlob方法中没有以下行 我试过使用ContentType和不使用ContentType。在这两种情况下,文件似乎都已上载到Blob。唯一的区别似乎是ContentType,如下图所示。 问题是,在尝试下载任何文件时,它导致了一个警告错误,之后两个文件都没有播放,

  • 问题内容: 尝试将文件上传到S3存储桶时遇到问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 SDK从Node.js上载到S3。 这些是我的路线设置: 这是items.upload()函数: 将param 设置为类似字符串的效果很好。根据doc,param必须获取 (缓冲区,类型数组,Blob,字符串,ReadableStream)对象数据。 但是,上传文件对象失败,并显示

  • 我正在使用Dropzone.js将文件上传到Azure云存储桶中。 这些文件正在上传到bucket,但当我下载它们时,它们已经损坏了。 我到处都找过了。我没有上传在块,一切似乎都在那里,但无论什么类型的文件我上传,它是破坏与我重新下载它。

  • 如果有人帮我解决这个问题,我会非常感激。 我正在为我的项目使用codeigniter框架。并想将我的图像上传到amazon s3桶中。当我尝试使用S3.php文件时 string(92)“不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。” 有人能帮我解决这个问题吗。

  • 我只是上传文件到谷歌云存储使用签名网址与Ajax上传。 已经完全上传了。但尝试从Bucket下载文件时,文件会像媒体文件一样损坏,否则pdf、txt文件工作正常。有什么建议请建议我谢谢。

  • 问题内容: 我想使用python复制s3存储桶中的文件。 例如:我的存储桶名称=测试。在存储桶中,我有2个文件夹名称为“ dump”和“ input”。现在,我想使用python将文件从本地目录复制到S3“转储”文件夹…有人可以帮助我吗? 问题答案: 尝试这个… [更新]我不是pythonist,所以感谢您对import语句的注意。另外,我不建议将凭证放在您自己的源代码中。如果您在AWS内部运行此