Проблема загрузки изображений на сервер
Для загрузки на сервер (apache) используется решение отсюда. Серверная часть выглядит так:
<?php
header("Content-Type: text/html;charset=utf-8");
$SITEDIR = $_SERVER['DOCUMENT_ROOT'];
if($_FILES["file"]["size"] > 1024*9*1024)
{
echo ("Размер файла превышает три мегабайта");
exit;
}
// Проверяем загружен ли файл
if(is_uploaded_file($_FILES["file"]["tmp_name"]))
{
// Если файл загружен успешно, перемещаем его
// из временной директории в конечную
move_uploaded_file($_FILES["file"]["tmp_name"], "{$SITEDIR}/uploads/".$_FILES["file"]["name"]);
} else {
echo("Ошибка загрузки файла: ".$_FILES["file"]["error"]);
}
?>
После загрузки на сервер файлы изображений увеличиваются в размере раза в 1,5, и их формат не разпознется просмотрщиками.
При загрузке текстового файла с кодировкой utf-8 на сервере они сохраняются в виде крокозябр вида (utf-8 -> Windows-1252).
В чем зарыта собака?
Использовались различные способы чтения файлов (readAsDataURL, readAsBinaryString, readAsArrayBuffer), ни один не дал исходного файла на сервере.
Заголовки HTTP POST запроса:
self.xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary="+boundary);
self.xhr.setRequestHeader("Cache-Control", "no-cache");
var body = "--" + boundary + "\r\n";
//var body;
body += "Content-Disposition: form-data; name='"+(params.fieldName || 'file')+"'; filename='" + params.file.name + "'\r\n";
body += "Content-Type: application/octet-stream\r\n\r\n";
//body += " Content-Transfer-Encoding: binary\r\n\r\n";
body += self.reader.result + "\r\n";
body += "--" + boundary + "--";
Источник: Stack Overflow на русском