Javascript HTML5 IndexedDB-如何将所有记录合并为一个
我的想法是从服务器上下载一个大文件Javascript HTML5 IndexedDB-如何将所有记录合并为一个,javascript,html,indexeddb,savefiledialog,chunks,Javascript,Html,Indexeddb,Savefiledialog,Chunks,我的想法是从服务器上下载一个大文件 存储到IndexedDB中的块 下载完所有区块后,将所有记录合并为一个(如SQL SELECT*FROM XXX…) 保存到磁盘“saveAs()”或创建指向IndexedDB的URL (或者有什么想法?) 我不知道如何做第二步。三, (下面是在DB中存储10000条记录的示例,以及步骤2之后的预期输出。应为SUSANSUSANSUSAN…) if(事务){ transaction.oncomplete=函数(){ } transaction.onabort=
if(事务){
transaction.oncomplete=函数(){
}
transaction.onabort=函数(){
WriteConsoleScreen(“事务中止”);
localDatabase.db.close();
}
transaction.ontimeout=函数(){
WriteConsoleScreen(“事务超时”);
localDatabase.db.close();
}
var store=transaction.objectStore(osTableName);
如果(商店){
var-req;
var customer={};
//创造万条记录
对于(var loop=0;loop<10000;loop++){
客户={};
customer.fname='Susan';
req=存储添加(客户);
req.onsuccess=功能(ev){
}
req.onerror=功能(ev){
writeToConsoleScreen(“未能添加记录。”+”错误:“+ev.message”);
}
}
}
}
var open=indexedDB.open('chunks-example');
open.onupgradeneeded=函数(){
//如有必要,创建架构
var db=打开的结果;
db.createObjectStore('chunks');
};
// 1. 存储到IndexedDB中的块。
open.onsuccess=函数(){
var db=打开的结果;
var tx=db.transaction('chunks','readwrite');
var store=tx.objectStore('chunks');
对于(变量i=0;i<10;++i){
//对于realz,这将是通过
//XMLHttpRequest.response和async。
var chunk=new Blob(['chunk'+i+'\n'],
{type:'application/octet stream'});
存储。放置(chunk,i);
}
tx.oncomplete=function(){merge(db);};
};
// 2. 在“下载”所有区块后,将所有记录合并为一个
函数合并(db){
var tx=db.transaction('chunks');
var store=tx.objectStore('chunks');
var chunks=[];
var request=store.openCursor();
request.onsuccess=函数(){
var cursor=request.result;
如果(光标){
chunks.push(cursor.value);
cursor.continue();
}否则{
saveAs('myfile',新Blob(块,
{type:'application/octet stream'}));
}
};
}
// 3. 保存到磁盘“saveAs()”
函数saveAs(文件名,blob){
var a=document.documentElement.appendChild(document.createElement('a'));
a、 href=URL.createObjectURL(blob);
a、 下载=文件名;
a、 单击();
a、 删除(a);
}
Q:开发者最可怕的噩梦是什么?答:当你在寻找一个问题的解决方案时,你会发现一个StackOverflow问题问的正是你想要的东西。这个问题是一年前提出来的,现在还没有人回答!我不认为这是不可能的。Mega.nz已经实施了该计划。我还在想他们是怎么做到的。
if (transaction) {
transaction.oncomplete = function () {
}
transaction.onabort = function () {
writeToConsoleScreen("transaction aborted.");
localDatabase.db.close();
}
transaction.ontimeout = function () {
writeToConsoleScreen("transaction timeout.");
localDatabase.db.close();
}
var store = transaction.objectStore(osTableName);
if (store) {
var req;
var customer = {};
// create ten thousand records
for (var loop = 0; loop < 10000; loop++) {
customer = {};
customer.fname = 'Susan';
req = store.add(customer);
req.onsuccess = function (ev) {
}
req.onerror = function (ev) {
writeToConsoleScreen("Failed to add record." + " Error: " + ev.message);
}
}
}
}
<!DOCTYPE html>
<script>
var open = indexedDB.open('chunks-example');
open.onupgradeneeded = function() {
// Create schema if necessary
var db = open.result;
db.createObjectStore('chunks');
};
// 1. Chunks stored into an IndexedDB.
open.onsuccess = function() {
var db = open.result;
var tx = db.transaction('chunks', 'readwrite');
var store = tx.objectStore('chunks');
for (var i = 0; i < 10; ++i) {
// For realz, this would be via
// XMLHttpRequest.response and async.
var chunk = new Blob(['chunk ' + i + '\n'],
{type: 'application/octet-stream'});
store.put(chunk, i);
}
tx.oncomplete = function() { merge(db); };
};
// 2. After "download" all chunks, merge all records into one
function merge(db) {
var tx = db.transaction('chunks');
var store = tx.objectStore('chunks');
var chunks = [];
var request = store.openCursor();
request.onsuccess = function() {
var cursor = request.result;
if (cursor) {
chunks.push(cursor.value);
cursor.continue();
} else {
saveAs('myfile', new Blob(chunks,
{type: 'application/octet-stream'}));
}
};
}
// 3. Save into disk "saveAs()"
function saveAs(filename, blob) {
var a = document.documentElement.appendChild(document.createElement('a'));
a.href = URL.createObjectURL(blob);
a.download = filename;
a.click();
a.parentElement.remove(a);
}
</script>