Jun*_*nes 6 java amazon-s3 amazon-web-services aws-sdk
我正在上传一个mp4使用预签名 URL 将视频上传到 AWS S3,上传成功,但当我尝试从 S3 下载视频并在媒体播放器(VLC 或 QuickTime)中播放时,它无法播放!
生成的预签名 URL 工作正常,但和mp3也会出现与上述相同的问题。WAVFLAC
生成预签名 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();
}
Run Code Online (Sandbox Code Playgroud)
从上述方法获取预签名 URL 后,我从 Postman 发出 HTTP PUT 请求,请求正文中包含 multipart/form-data,如下所示:
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'file=@/Users/john/Downloads/sampleDemo.mp4'
Run Code Online (Sandbox Code Playgroud)
预签名 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
Run Code Online (Sandbox Code Playgroud)
我尝试在getPreSignedS3Url()使用方法中将内容类型设置为 mp4generatePresignedUrlRequest.setContentType( "video/mp4" );并添加Content-Type : "video/mp4"到 HTTP PUT 请求标头中,但它不起作用,并且失败并出现错误Signature doesn't match。
我使用 S3 作为我的个人备份硬盘,我希望使用预先签名的 URL 将视频和音频文件上传到 S3,在将来的某个时候下载它们并能够播放它们,但我'下载后我无法播放它们。
有谁知道这可能是什么原因造成的?
PUT不支持对 S3 的请求multipart/form-data。请求正文只需要包含二进制对象数据即可。如果您从 S3 下载现有文件并使用文本编辑器打开它,您会发现 S3 保留了文件内的多部分表单结构,而不是将其解释为实际负载的包装器。
| 归档时间: |
|
| 查看次数: |
3118 次 |
| 最近记录: |