Это не может занять больше времени. Я пытался это решить очень долгое время.
Я расскажу вам весь мой сценарий, а затем, в чем проблема.
У меня есть этот веб-сайт. На одной странице пользователь может выбирать между тремя типами ввода изображений.
Это группа переключателей:
o Twitter Logo
o Twitter Profile Picture
o Upload picture
Если пользователь выбирает вариант 1 или 2, img tag src обновляется с файлом локального проекта (http://localhost:9000/public/images/image.png
), и это изображение src сохраняется в переменной хранения веб-сессии html5,
Если пользователь выбирает вариант 3, он/она выбирает файл со своего компьютера (под группой радиостанций появляется тип ввода = "файл"), а img tag src обновляется этим изображением. На этот раз src, который я буду хранить в переменной сеанса, не будет путь к файлу (который я знаю из соображений безопасности), но src будет строкой base64. Действительно большой, если пользователь выбирает большое изображение.
Итак, теперь у меня есть это изображение, хранящееся в переменной сеанса, либо путь к файлу изображения, включенному в папку проекта, либо изображение с кодировкой base64.
Теперь я должен извлечь это значение из переменной сеанса в JavaScript. Я хочу передать это изображение в свой код на стороне сервера. Для создания фактического изображения и загрузки его в места, но эта часть действительно не нужна.
Моя проблема в том, что в JavaScript я не могу передать это с помощью POST с использованием $.ajax
. Строка base64 слишком большая, я думаю, и я не могу понять, как я могу преобразовать ее в что-то еще, скажем байт [].
Как мне это сделать? Я хочу передать это изображение, которое пользователь выбирает на стороне сервера для дальнейшего процесса. Затем на стороне сервера я хочу преобразовать его в фактический объект Image или BufferedImage.
Вот код-блок, как он выглядит сейчас:
function gatherSessionValuesAndGenerateCode(userEmail) {
var email = userEmail;
var category = getSessionValue("category");
var itemName = getSessionValue("itemName");
var service = getSessionValue("service");
var accountName = getSessionValue("accountName");
var action = getSessionValue("action");
var imageType = getSessionValue("imageType");
var imageFile = getSessionValue("imageFile");
var expirationDate = getSessionValue("expirationDate");
$.ajax({
type: "POST",
url: "http://localhost:9000/quikkly/business/create/generate",
data: {
email: email,
category: category,
itemName: itemName,
service: service,
accountName: accountName,
action: action,
imageType: imageType,
imageFile: imageFile, //This is making me feel ill, don't know how to solve it.
expirationDate: expirationDate
},
success: function(response){console.log("Horayyy "+response)}
});
}
хорошо, я получил вашу точку, но то, что я пытаюсь сказать, может быть, ваша строка содержит 20K символов, но я не думаю, что она может быть больше 2-3 Мб, и я надеюсь, что ваши настройки сервера позволяют публиковать данные размером 2 -3 МБ.
Помимо этого, я думаю, что создание имени пути изображения в base_64 не является хорошей идеей. Если вы считаете, что кто-то может выталкивать данные из вашего изображения, тогда он может сделать что-то с вашей полной концепцией веб-сайта.
Потому что любой, как человек может видеть путь к изображению, даже когда вы показываете какое-то изображение через веб-страницу.
Тем не менее, если вы считаете, что вам не нужен путь в виде просмотра, вы можете сохранить его в каком-либо файле в паре ключей или вы можете сохранить его в базе данных.
ИЛИ вы можете сделать еще одну вещь, просто сохраните имя файла изображения в своих данных для просмотра и добавьте точный путь, если хотите использовать его внутри сервера на стороне сервера.
enctype="multipart/form-data"
добавитьenctype="multipart/form-data"
в<form>
.