2012-05-18 2 views
3

Я хочу создать текстовый файл из строки. в настоящее время я использую функцию, которая принимает массив и превращает его в строку, затем используя эту строку, я хочу создать локальный текстовый файл, который загружает пользователь. я попытался с помощью этого методаСоздать текстовый файл из String с помощью JS и html5

function createFile(){ //creates a file using the fileLIST list 
    var output= 'Name \t Status\n'+ fileLIST[0][0].name+'\t'+fileLIST[0][1]+'\n'; 
    var Previous = fileLIST[0]; 
    for (var i=1; i<fileLIST.length; i++) 
     if (fileLIST[i][1] =='none' || fileLIST[i][1] == Previous[1]) 
      continue 
     else { 
      Previous = fileLIST[i] 
      output = output + fileLIST[i][0].name +'\t'+fileLIST[i][1] + '\n';} 

    window.open("data:text/json;charset=utf-8," + escape(output));//should create file 
    display(); } 

я использую хром, как мой браузер. также я бы предпочел ответ JS или HTML5.

спасибо заранее

+1

и что случилось с этим кодом? – Joseph

+0

открывает новую вкладку и ничего не делает. он не создает файл для загрузки – GreenGiant

+0

Является ли код в вопросе на стороне сервера JS? –

ответ

4

В итоге я использовал этот код. он создает ссылку для загрузки URL-файла файла.

 window.URL = window.webkitURL || window.URL; 
    window.BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder ||  window.MozBlobBuilder; 
    file = new WebKitBlobBuilder(); 
    file.append(output); 
    var a = document.getElementById("downloadFile"); 
    a.hidden = ''; 
    a.href = window.URL.createObjectURL(file.getBlob('text/plain')); 
    a.download = 'filename.txt'; 
    a.textContent = 'Download file!'; 
} 

также таким образом добавляет меньше на сайт, делая его более легким сайтом для медленных соединений. В моем html есть пустой div, в который это добавляется.

<div class ='paginationLIST' id='pagination'></div> 
+2

Возможно, я что-то пропустил, но код souldn 't будет что-то вроде: 'file = new BlobBuilder', потому что вы назначили этому объекту Webkit или Moz BlodBuilder. Правильно ли я? –

0

Я предлагаю вам использовать скрытый iframe вместо window.open, чтобы сделать его «более чистый метод»

, и я считаю, что это text/octet-stream и не text/json, чтобы заставить скачать. И насколько я знаю, вы не можете установить имя файла таким образом.

Однако Chrome (18+, я думаю) имеет download attribute for its <a> tags, в котором вы можете указать имя файла вместе с использованием blob: для URL.

+0

как бы вы могли использовать iframe для создания файла? изменение «text/json» ничего не изменило – GreenGiant

+0

@GreenGiant см. демонстрацию, которую я предоставил. это скрипка, которая автоматически загружает файл. Кроме того, вместо того, чтобы использовать 'window.open (url)', вместо этого установите скрытый код iframe. – Joseph

+0

Я получаю сообщение об ошибке при запуске скрипта: «Ресурс интерпретируется как Документ, но передается с типом текста/октетом-потоком MIME:« data: text/octet-stream, foo ». – GreenGiant

5

Преобразование ваш object в строку JSON.

var json_string = JSON.stringify(object, undefined, 2); 

Примечания:

  1. Если у вас уже есть строка, пропустите шаг выше.
  2. Если вы не хотите, чтобы он был отформатирован красиво, удалите , undefined, 2.

Создать ссылку для скачивания и нажмите кнопку:

var link = document.createElement('a'); 
link.download = 'data.json'; 
var blob = new Blob([json_string], {type: 'text/plain'}); 
link.href = window.URL.createObjectURL(blob); 
link.click(); 

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

  • Нет связанных вопросов^_^