2015-10-23 4 views
7

У меня есть холст и извлекается из него данные изображения с помощью canvas.toDataURL('image/png').Тип ввода = «файл» set base64 данные изображения

Проблема:<input type="file" /> хочет, чтобы путь к файлу был value вместо данных base64.

Вопрос:Как отправить данные base64 изображения на сервер с помощью <input type="file" /> без сохранения их в локальной файловой системе?

Мои обходные: Пробовал скрытый ввод <input type="file" />, но сервер требует имя файла свойства

Может быть, это можно преодолеть это с XmlHttpRequest?

+1

Почему вам нужно конвертировать base64 изображение в файл ввода? Вы можете просто отправить строку base64 на сервер, а затем преобразовать его на сервер изображения. –

+1

@ Сервер YeldarKurmangaliyev - это третья сторона, я не могу изменить ее API. –

+0

О, я вижу. Думаю, эта статья может вам помочь: http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdata/5100158 –

ответ

0

Вы можете использовать FileReader, проверить примеры здесь: https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

+0

мое изображение не существует на локальном, только в памяти. Будет ли это работать? –

+0

Я вижу, тогда вы можете просто использовать XHR (XMLHttpRequest), чтобы отправить dataUrl на сервер –

8

Просто создать скрытый элемент ввода в форму. (Обратите внимание на тип )

<input type="hidden" name="myHiddenField"> 

Приложите свои данные к значению элемента перед отправкой.

var imageData = canvas.toDataURL('image/png'); 
document.getElementsByName("myHiddenField")[0].setAttribute("value", imageData); 

UPDATE

Если ваши требования сервера, чтобы иметь параметр «имя файла» в представленных данных, а затем включить эту строку в качестве имени input элемента.

<input type="hidden" name="filename"/> 

Это аннулирует форму для отправки ваших данных с параметром «имя файла», включенным в нее.

Если вы хотите использовать XMLHttpRequest для этого, Ниже приведен пример:

//Prepare data to be sent 
var imageData = canvas.toDataURL('image/png'); 
var params = "filename=" + imageData; 

//Initiate the request 
var httpRequest = new XMLHttpRequest();    
httpRequest.open('POST', 'test.php', true); 

//Send proper headers 
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
httpRequest.setRequestHeader("Content-length", params.length); 
httpRequest.setRequestHeader("Connection", "close"); 

//Send your data 
httpRequest.send(params); 
+1

, к сожалению, это не работает, потому что сервер требует параметра 'filename'. См. Http://stackoverflow.com/questions/33297565/submit-hidden-input-with-filename-parameter –

+0

Фокус в том, что вы можете использовать name = "filename" во входном элементе. Я обновил свой ответ с помощью этого метода, а также метода XMLHttpRequest. –

+0

Я управляю этим через 'new FormData (formEl)' –

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