2012-01-10 4 views
3

У меня проблемы с безопасностью, возможно, это не позволяет, но можно ли создать файл с JavaScript и разрешить пользователю перетаскивать его на рабочий стол (или файловую систему)?HTML5: перетащить созданный JS-файл

Следующий код влачит файл с сервера

files[0].addEventListener("dragstart",function(evt){ 
    evt.dataTransfer.setData("DownloadURL", "application/octet-stream:Eadui2.ttf:http://thecssninja.come/demo/gmail_dragout/Eadui.ttf"); 
},false); 

И ниже код, который я могу создать файл и иметь его загрузить, но я не могу установить имя файла или позволить пользователю выбрать место нахождения.

var uriContent = "data:application/octet-stream," + encodeURIComponent(JSON.stringify(map)); 
location.href = uriContent; 

В идеале я хотел бы получить магическое сочетание обоих.

+0

Почему бы вам не попробовать сохранить его на сервере, а затем загружать его, а затем удалить его с сервера? –

+0

Вы пытались 'files [0] .addEventListener (" dragstart ", function (evt) { evt.dataTransfer.setData (" DownloadURL "," application/octet-stream: Eadui2.ttf: data: application/octet-stream , "+ encodeURIComponent (JSON.stringify (Карта)); ); }, false); '??? – Ben

+0

@Andrew Да, это вариант, мой клиент хотел, чтобы в приложении не было взаимодействия с сервером, но это единственный способ сделать это. – kreek

ответ

2

Это возможно только для Chrome, и даже в Chrome вы не можете установить местоположение. При использовании только Chrome в порядке, то вы будете иметь следующие параметры:

  1. Палка с Drag N»Капля, как из учебника в CSS Ninja, тогда вы должны попытаться ответить Бен. encodeURIComponent - это один из способов, но если у вас есть файл с BlobBuilder, вы можете использовать window.webkitURL.createObjectURL(), чтобы получить URL-адрес файла. Вы также можете попробовать использовать FileWriter() с requestFileSystem(TEMPORARY, ...).

  2. Chrome поддерживает download атрибут для якорных тегов, так что вы можете иметь регулярную связь для пользователя нажать (перетаскивание работает):

    <a href="#your_url" download="filename.ext">Download</a>

  3. Для перекрестной поддержки браузера я предлагаю Downloadify.

1

Вы можете попробовать отправить его на сервер, сохранить файл, проверить возвращаемое значение и запустить функцию файла загрузки, а затем файл сервера, удаляющий файл с сервера.

Что-то вроде этого (с JQuery)

$.ajax({ 
    url: 'saveFile.php', 
    method: 'post', 
    data: { 
    Filedata: data// file data variable 
    }, 
    success: function(d) { 
    // save file function, where d is the filename 
    } 
}) 

PHP: $ имя_файла = // генерировать имя файла file_put_contents ($ файла, $ _POST [ 'Filedata']); echo $ filename;

Очевидно, есть больше, но это должно быть основы

3

следующий код в настоящее время работает в Chrome только:

// generate downloadable URL, file name here will not affect stored file 
var url = URL.createObjectURL(new File([JSON.stringify(map)], 'file_name.txt')); 
// note that any draggable element may be used instead of files[0] 
// since JSON.stringify returns a string, we use 'text' type in setData 
files[0].addEventListener("dragstart", function(evt) { 
    evt.dataTransfer.setData("DownloadURL", "text:file_name.txt:" + url); 
}, false); 

сейчас, волоча наши файлы [0] элемент из браузера настольного компьютера или файловой системы, будет хранить там текстовый файл с именем, имя_файла .текст.

Вы можете выбрать другое имя файла :)

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