2014-10-08 5 views
-1

Я написал код для загрузки видео, загруженного в amazon s3, используя aws javascript sdk. Все работает отлично, но некоторые видеоролики открываются в браузере и начинают играть. Вот код ниже:Как заставить скачать видео в AngularJs от Amazon S3?

Вид:

<a href="#" ng-click="downloadVideo(video)">Download Video</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);    
      $window.open(videoSignedUrl); 
     } 

VideoFactory:

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. Каково рекомендуемое решение проблемы и как другие справляются с такими проблемами?

Я сделал google, но большинство ответов stackoverflow здесь говорят, чтобы открывать файлы в окне, и браузеры автоматически загружают его.

ответ

1

Попробуйте это решение, это может вам помочь. enter link description here

Вид:

<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(); 
} 
+0

Я пробовал это раньше. Не работает – VishwaKumar

+0

Я написал, что работал для меня. Пожалуйста, см. Мой ответ – VishwaKumar

+0

Я также пробовал это. в этом сценарии работает нормально. –

0

Трюк, который работал делал видео в качестве вложения во время загрузки видео на 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 для меня.