我正在使用预签名URL将一个
生成的预签名URL与
生成预签名URL的代码:
mp4
视频上传到 AWS S3,上传成功后,当我尝试从S3下载视频并在媒体播放器(VLC或QuickTime)中播放时,它无法播放!生成的预签名URL与
mp3
一起使用时运行良好,但对于 WAV
和 FLAC
,也会出现上述相同的问题。生成预签名URL的代码:
public String getPreSignedS3Url( final String userId, final String fileName )
{
Date expiration = new Date();
long expTimeMillis = expiration.getTime();
expTimeMillis += urlExpiry;
expiration.setTime(expTimeMillis);
String objectKey = StringUtils.getObjectKey( userId, fileName );
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
recordingBucketName, objectKey)
.withMethod(HttpMethod.PUT)
.withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
之前提到的获取预签名 URL 的方法,得到后我们可以通过 Postman 发送一个包含 multipart/form-data 数据的 HTTP PUT 请求,请求体应该长这样:
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'file=@/Users/john/Downloads/sampleDemo.mp4'
预签名的 URL 类似于这样:
https://meeting-recording.s3.eu-west-2.amazonaws.com/331902257/sampleDemo.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20190720T125751Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3599&X-Amz-Credential=AKIAZDSMLZ3VDKNXQUXH%2F20190720%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Signature=dfb8054f0738e07e925e9880e4a8e5ebba0a1bd3c84a3ec78913239f65221992
我尝试在getPreSignedS3Url()
方法中使用generatePresignedUrlRequest.setContentType( "video/mp4" );
设置内容类型为mp4,并在HTTP PUT请求标头中添加Content-Type : "video/mp4"
,但它没有起作用并且因错误签名不符
而失败。
我正在使用S3作为我的个人备份硬盘,我希望使用预签名URL将视频和音频文件上传到S3,将来可以下载它们并能够播放,但我无法在下载后播放它们。
有谁知道是什么原因导致这种情况?
multipart/form-data
对于mp3
起作用呢? - Junes