2012-02-07 4 views
0

Я пишу приложение, которое будет запускаться в браузере webkit. Мне нужно, чтобы данные были локально сохранены на устройстве и экспортированы в формате .csv. Возможно ли это с помощью javascript? Это нужно сделать в браузере. Php не вариант. СпасибоКак экспортировать веб-SQL в файл .CSV

+0

Вы имеете в виду базу данных веб-SQL? 'Window.openDatabase()'? –

+0

Да, вот что я имел в виду. http://www.w3.org/TR/webdatabase/ – Tim

ответ

0

Предполагая, что файл sqlite находится на сервере (мы не говорим о локальном хранилище, верно?), Вам все равно придется обращаться к файловой серверной стороне.

+0

Я говорю о хранилище sql в браузере. Вот ссылка. http://www.w3.org/TR/webdatabase/ – Tim

1

Вы можете сделать это, но вам нужно будет сериализовать ваш javascript в csv вручную. Вам также нужно будет решить, какой диалект CSV использовать.

Ниже приведена одна (непроверенная) возможность, которая показывает общий шаблон, который вы должны использовать.

function csvQuoteCell(cell, quotechar, sepchar) { 
    // quote cells containing sepchar and double quote chars 
    // this is an excel dialect 
    var quoted = cell; 
    if (cell.indexOf(sepchar)!==-1) { 
     if (cell.indexOf(quotechar)!==-1 { 
      quoted = quoted.replace(quotechar, quotechar+quotechar); 
     } 
     quoted = quotechar+quoted+quotechar; 
    } 
    return quoted; 
} 
function array2csv(ar, quotechar, sepchar) { 
    var quoted = []; 
    for (var i=0;i<ar.length;i++) { 
     quoted.push(csvQuoteCell(ar[i], quotechar, sepchar); 
    } 
    return quoted.join(sepchar); 
} 

var db = openDatabase('mydb','1.0','thedatabase',1024*1024); 
db.readTransaction(function(tx){ 
    tx.executeSql('SELECT col1, col2, col3 FROM thetable', [], function(tx, results){ 
     var quotechar = '"'; 
     var sepchar = ','; 
     var row, rowarray, csvstring; 
     var csvs = []; 
     var fieldnames = ['col1','col2','col3']; 
     // this is the header row 
     csvs.append(array2csv(fieldnames, quotechar, sepchar)); 
     for (var i=0; i<results.rows.length; i++) { 
      row = results.rows.item(i); 
      // you need to make sure you have an explicit order for the csv 
      // row is an object with unordered keys! 
      rowarray = []; 
      for (var j=0;j<fieldnames.length;j++) { 
       rowarray.push(row[fieldnames[j]]); 
      } 
      csvs.push(array2csv(rowarray, quotechar, sepchar)); 
     } 
     csvstring = csvs.join('\r\n'); 
     // csvstring should now contain a multirow csv string 
    }); 
}); 

Однако, это, вероятно, не представляется возможным «скачать» файл из JavaScript в локальной файловой системе, только, чтобы загрузить его на сервер. В зависимости от вашей конкретной среды браузера вы можете использовать очень-черновик FileWriter api, какую-либо флеш-карту или java-апплет, или, может быть, какой-то проприетарный API, предлагаемый вашим устройством.

+0

Можете ли вы создать этот файл, а затем отправить его по ftp? – Tim

+0

Если ваша среда браузера не имеет некоторых расширений ftp, скорее всего, нет. Тем не менее, вы можете HTTP POST или PUT с помощью XMLHttpRequest. –

Смежные вопросы