2016-09-09 4 views
0

У меня есть изображение, которое reader.readAsDataURL(file) закодировано в base64 string. Я также использовал var imageBlob = ImageDataUrl.substring(ImageDataUrl.indexOf(",") + 1); , чтобы вырезать data:image/png;base64, часть.URL-адрес Json Request с строкой Base64

Теперь я должен отправить строку base64 через запрос json с помощью var link = "http://localhost:9002/AppAPI/rest/app/uploadImage?image="+imageBlob;.

Но почтальон не получает ответа, и я предполагаю, что некоторые символы из строки base64 влияют на URL-адрес запроса Http.

Пожалуйста, есть ли способ, которым я могу обойти это?

+0

Попробуйте использовать POST вместо GET. – jcubic

+0

Я использовал POST и GET, и оба они не работают –

+0

1) base64 не является оптимальным для отправки данных. 2) вы можете использовать такие продукты, как https://www.filestack.com/, чтобы загрузить изображения с вашего пути. 3), если вы беспокоитесь о конфликтующих символах, используйте '' 'encodeURIComponent''' –

ответ

0

GET определенно не подходит для использования при загрузке изображения. GET must be both idempotent and safe (то есть повторяемость и чтение без побочных эффектов). В самом деле, RFC 7231 4.2.1 явно предостерегает от безопасных методов, выполняющих действия с побочными эффектами на основе параметров строки запроса:

К примеру, это общие для веб-программное обеспечение для редактирования контента, чтобы использовать действия в параметры запроса, такие как «страница? do = удалить». Если целью такого ресурса является выполнение небезопасного действия, владелец ресурса ДОЛЖЕН отключить или запретить это действие при его доступе с использованием безопасного метода запроса .

Для загрузки изображения вы, вероятно, захотите сделать PUT с содержимым изображения в теле запроса, а не строкой запроса (и, следовательно, нет необходимости кодировать его base64). Размещение содержимого изображения в строке запроса вряд ли будет работать правильно. Большинство серверов применяют ограничение длины URI, которое почти наверняка будет превышено всеми, кроме самых маленьких изображений с кодировкой base64. Согласно RFC 7230 3.1.1, сервер должен отправить 414 ответ клиенту, когда URI слишком длинный, хотя я не удивился бы, если бы были несоответствующие серверы, игнорирующие это требование.

Возможно, вам понадобится избежать знака = в конце строки, кодированной base64, но я рекомендую полностью отказаться от параметра строки запроса в кодировке base64.