Javascript 如何强制从AmazonS3下载AngularJs格式的视频?
我已经编写了使用aws javascript sdk下载上传到AmazonS3的视频的代码。一切正常,但有些视频在浏览器中打开并开始播放。代码如下: 视图: 视频工厂:Javascript 如何强制从AmazonS3下载AngularJs格式的视频?,javascript,angularjs,video,amazon-web-services,amazon-s3,Javascript,Angularjs,Video,Amazon Web Services,Amazon S3,我已经编写了使用aws javascript sdk下载上传到AmazonS3的视频的代码。一切正常,但有些视频在浏览器中打开并开始播放。代码如下: 视图: 视频工厂: downloadVideo: function (bucketPath,fileName) { bucketName = aws.bucket_name; options = { accessKeyId : 'XXXXXXXXXXXXXXXXXXXXX', secretAcces
downloadVideo: function (bucketPath,fileName) {
bucketName = aws.bucket_name;
options = {
accessKeyId : 'XXXXXXXXXXXXXXXXXXXXX',
secretAccessKey : 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
region : 'XXXXXX'
}
var params = {
Bucket: bucketName + '/'+ bucketPath, Key: fileName, Expires: 60
};
var s3 = new AWS.S3(options);
var url = s3.getSignedUrl('getObject', params);
return url;
}
因此,当视频在新窗口中打开时,它们开始从浏览器底部下载。但对于一些未知的视频,他们打开窗口开始播放。我怎样才能在angularjs阻止这一切。建议的解决方法是什么?其他人如何处理此类问题
我用谷歌搜索过,但这里的大多数答案都是在窗口中打开文件,浏览器会自动下载 试试这个解决方案,它可能会对你有所帮助 视图:
成功的诀窍是将视频作为附件上传到S3:
options = {
accessKeyId : 'xxxxxxxxxxxxxxxxxxxxxxx',
secretAccessKey : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
region : 'xxxxxx'
}
var s3 = new AWS.S3(options);
var params = {
Bucket : bucketName + '/' + bucketStructure,
Key: fileName,
ContentType: file.type,
Body: file,
ServerSideEncryption: 'AES256',
ACL : 'private',
ContentDisposition: 'attachment; filename=' + fileName,
ContentType: 'application/octet-stream'
};
s3.putObject(params, function(err, data) {
if(err) {
// There Was An Error With Your S3 Config
console.log('AWS Error : '+err.message);
return false;
}
else {
console.log('AWS Video upload done!');
}
})
这将使视频在使用签名url时自动强制下载。已经为我的大多数视频mime类型工作。我已经发布了适合我的。请看我的答案
downloadVideo: function (bucketPath,fileName) {
bucketName = aws.bucket_name;
options = {
accessKeyId : 'XXXXXXXXXXXXXXXXXXXXX',
secretAccessKey : 'XXXXXXXXXXXXXXXXXXXXXXXXXXX',
region : 'XXXXXX'
}
var params = {
Bucket: bucketName + '/'+ bucketPath, Key: fileName, Expires: 60
};
var s3 = new AWS.S3(options);
var url = s3.getSignedUrl('getObject', params);
return url;
}
<a href="#" ng-click="downloadVideo(video)">Download Video</a>
<a id="ExportToExcel" style="display: none;"></a>
$scope.downloadVideo = function (video) {
videoLocation = video.video_location;
var bucketPath = videoLocation.substring(0, videoLocation.lastIndexOf("/") + 1);
bucketPath = bucketPath.substring(0, bucketPath.length - 1);
var fileName = videoLocation.substring(videoLocation.lastIndexOf("/") + 1, videoLocation.length);
var videoSignedUrl = VideoFactory.downloadVideo(bucketPath,fileName);
document.getElementById("ExportToExcel").href = videoSignedUrl;
document.getElementById("ExportToExcel").click();
}
options = {
accessKeyId : 'xxxxxxxxxxxxxxxxxxxxxxx',
secretAccessKey : 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
region : 'xxxxxx'
}
var s3 = new AWS.S3(options);
var params = {
Bucket : bucketName + '/' + bucketStructure,
Key: fileName,
ContentType: file.type,
Body: file,
ServerSideEncryption: 'AES256',
ACL : 'private',
ContentDisposition: 'attachment; filename=' + fileName,
ContentType: 'application/octet-stream'
};
s3.putObject(params, function(err, data) {
if(err) {
// There Was An Error With Your S3 Config
console.log('AWS Error : '+err.message);
return false;
}
else {
console.log('AWS Video upload done!');
}
})