В Node.js как конвертировать загруженное изображение из нескольких частей / данных формы в формат base64 - PullRequest
1 голос
/ 19 июня 2011

Я хочу позволить пользователю выбрать изображение из своей локальной файловой системы, а затем отобразить это изображение в элементе canvas на странице.

Из-за ограничений безопасности (модель безопасности браузера «песочница»),клиентский javascript не может напрямую получить доступ к изображению в файловой системе, поэтому он должен совершить двустороннюю передачу на сервер в виде 'multipart / form-data' из элемента управления загрузкой файлов.сохраните этот образ на сервере и раздайте его, поскольку он предназначен только для одноразовых манипуляций на стороне клиента.Итак, мне было интересно, возможно ли преобразовать данные на стороне сервера в закодированное в base64 представление, которое можно было бы отправить обратно клиенту.Тогда я мог бы легко отрисовать его обратно клиенту в виде URL-адреса данных, даже не сохраняя изображение где-либо на сервере.Или есть лучший способ?

Я использую node.js на сервере.

Ответы [ 2 ]

1 голос
/ 19 июня 2011

Я не вижу необходимости сохранять его на сервере или нести стоимость Base64, кодирующего URI данных ; просто сохраните его в памяти достаточно долго для загрузки клиентом. Итак, ваша последовательность будет выглядеть примерно так:

  1. Клиент загружает изображение с помощью представления «multipart / form-data».
  2. Когда сервер получает форму, он генерирует одноразовый URL-адрес (который, например, может быть возвращен в качестве тела ответа на запрос в # 1); данные файла изображения просто сохраняются в памяти.
  3. Клиент может получить данные изображения с URL-адреса в # 2.
  4. Когда клиент запрашивает URL в # 2, сервер просто отображает данные изображения; по завершении запроса сервер может удалить ссылку на данные, освобождая память.

Обратите внимание, что из-за асинхронного характера обоих узлов node.js и AJAX запросы 1-4 могут выполняться одновременно (хотя «отбрасывающий» URL-адрес может быть согласован отдельно от сообщения формы, чтобы он действительно работать так).

1 голос
/ 19 июня 2011

перейдите к https://github.com/joyent/node/wiki/modules,, возьмите библиотеку кодирования base64 и просто отобразите data:image/png;base64,, а затем файл в кодировке base-64, заменив "png" на любой подходящий (gif / jpeg)

«лучший» способ - это поместить файл в папку tmp, отобразить ссылку на этот файл и затем удалить все файлы в этом каталоге, которые старше X минут.

...