2016-03-15 127 views
1

下面的代码下载一个文件,无法打开(损坏),我完全不知道为什么。我已经在很多方面尝试了这一点,但它永远不会工作,它总是会产生一个损坏的文件。原始文件不是问题,因为它可以正常打开。我正在尝试打开mp4,mp3和图像文件。Javascript Blob anchortag下载产生损坏的文件

//$scope.fileContents是一个字符串

$scope.fileContents = $scope.fileContents.join(","); 
     var blob = new Blob([$scope.fileContents], {type: $scope.file.fileDetails.type}); 
     var dlURL = window.URL.createObjectURL(blob); 
     document.getElementById("downloadFile").href = dlURL; 
     document.getElementById("downloadFile").download = $scope.file.fileDetails.name; 
     document.getElementById("downloadFile").click(); 
     window.URL.revokeObjectURL(dlURL); 
+0

'$ scope.fileContents是string'这就是问题所在。它需要是二进制的。 – Musa

回答

2

您需要使用ArrayBuffer例如下载的文件内容为二进制

$http.get(yourFileUrl, { responseType: 'arraybuffer' }) 
    .then(function (response) { 
     var blob = new Blob([response.data], {type: $scope.file.fileDetails.type}); 
     // etc... 
    }); 


来源:

+0

您节省了我的时间 –

+1

如果字节数组来自数据库会怎么样?我面临同样的问题,但在我的情况下,字节数组是直接从数据库传递给JavaScript函数 – Soumya