overflowers!Base64 -> AJAX -> PHP пишет 0 байтовый файл в Android-браузере для Android
У меня возникла странная проблема с сохранением файла в каталоге на моем сервере. Поток выглядит следующим образом:
- Создать изображение из полотна.
- Напишите изображение на моем сервере через AJAX, используя PHP. (разрешения для каталога 777)
- Прибыль.
Единственная икота, которую я имею до сих пор, - это использование браузера Android Browser. Я смог успешно сохранить изображение, используя список поддерживаемых браузеров для этого проекта. (Safari, Firefox, Chrome, IE9 +). Однако, когда я тестирую браузер Android, PHP -, сохраняющий файл в правильном каталоге, но в 0 байт. Я тестирую на Android v. 4.1.1
Мой вопрос: почему в этом случае я получаю файл с 0 байтами? Как я могу это исправить?
Я был по всему Google и stackoverflow, пытаясь найти ответ, и, к сожалению, до сих пор тестировал около двадцати различных решений. Мне интересно, есть ли ошибка, которую я легко потерял, поскольку я так долго смотрел на тот же код.
Вот AJAX вызов: (CoffeeScript)
$.ajax
type: "POST"
url: "#{servicesSrc}image-utils.php"
data:
post_method: "save_image"
image_data: image.src
name_prefix: @currentServiceString + "_"
success: (response) =>
doStuff(response) # <-- redacted method name
error: (jqXHR, textStatus, errorThrown) ->
console.error("storeTempUserImage :: Error: #{textStatus}", errorThrown)
и PHP: ('УДАЛЕНО/FILE/PATH') правильно, и используется в каждом сценарии, но я могу» t.
$randomID = get_random_string();
$imageData = $_POST["image_data"];
$imageData = str_replace("data:image/jpeg;base64,", "", $imageData);
$imageData = str_replace(" ", "+", $imageData);
$data = base64_decode($imageData);
$namePrefix = (isset($_POST["name_prefix"])) ? $namePrefix = $_POST["name_prefix"] : $namePrefix = "";
$absoluteURL = $namePrefix.$randomID.".jpg";
$destinationURL = "REDACTED/FILE/PATH" . $absoluteURL;
$fp = fopen($destinationURL, "wb");
fwrite($fp, $data);
fclose($fp);
echo $absoluteURL;
и выходной образец надлежащим образом сохраненного изображения, и неправильно сохраненное изображение: twitter_jKbxRIt3NRw8Nd1ucJFcDSrMUBPs9H7M.jpg 98 Кб (97,866 байт) twitter_LLAwIET5VJDO4LXvD4O0hsngnj2UYata.jpg 0 В (0 байт)
Благодаря заранее за любую помощь!
ли 'image_data' содержать что-нибудь, отправляемое из Android-браузера? Как извлекается «image.src»? Это больше похоже на то, что пустые данные передаются скрипту PHP, чем ошибка с скриптом. – pilsetnieks
Отличное наблюдение.Ваш комментарий помог мне понять, что часть проблемы была вне AJAX/PHP, относящаяся к данным изображения. Как только у меня проблема будет решена, я прокомментирую свои выводы и пометьте это как решение. Спасибо за вашу помощь! –