2015-10-06 33 views
1

我想做到这一点:通过Javascript是否可以通过Javascript下载数据,然后通过文件路径引用该数据?

  1. 下载数据从服务器(这我知道我能做到)
  2. (我知道我可以用IndexedDB的做到这一点),其存储在磁盘上
  3. 将该数据引用为文件路径。 (例如:如果我下载了一个mp3,我希望它能够将它传递到HTML5音频标签中作为“foo.mp3”)

#3可能吗?

我知道我可以使用base64并创建一个数据URI,但这很慢,并且(至少对于音频)在Android和iOS上都不起作用(我已经使用纯HTML5音频标记和SoundManager2)。

注:我只对跨浏览器,跨平台解决方案感兴趣。

回答

0

从表面上看,你应该能够做到以下几点:

  • 阅读斑背出数据库
  • 使用URL.createObjectURL()的构造URL的BLOB
  • 的URL指定给audio元素
  • 可选:URL.revokeObjectURL()释放BLOB当它不再需要(例如,如果音频元素被赋予了新的URL)

例如:

<!DOCTYPE html> 
<title>IndexedDB/Blob/URL Example</title> 
<p>Select audio file here: <input type=file> 
<p>Then play here: <audio controls></audio> 
<script> 
// When a file is selected... 
document.querySelector('input[type="file"]').addEventListener('change', function(e) { 
    var file = e.target.files[0]; 

    // Open the database connection. 
    var open = indexedDB.open('blob-test'); 
    open.onupgradeneeded = function() { 
    // Define the database schema if necessary. 
    var db = open.result; 
    var store = db.createObjectStore('files'); 
    }; 
    open.onsuccess = function() { 
    var db = open.result; 
    var key = 1; 

    // Write file to DB 
    var tx = db.transaction('files', 'readwrite'); 
    var store = tx.objectStore('files'); 
    store.put(file, key); 

    // Later, read file back out of DB 
    var tx2 = db.transaction('files'); 
    var store2 = tx2.objectStore('files'); 
    var request = store2.get(key); 
    request.onsuccess = function(e) { 
     // Got the file! 
     var file = request.result; 
     // Construct a URL for it 
     var url = URL.createObjectURL(file); 
     // Update audio element with the URL 
     document.querySelector('audio').src = url; 
    }; 
    }; 
}); 
</script> 

..但是你仍然要测试无处不在。最近修复了一些错误,例如Android上的Chrome会对此产生影响(例如,https://crbug.com/227476

相关问题