Как сохранить изображение на стороне сервера при отправке из JavaScript - PullRequest
2 голосов
/ 20 марта 2012

Я делаю скрипт загрузки с помощью перетаскивания, прочитав несколько учебных пособий, но они охватывают только часть javascript, и у меня возникают проблемы с частью php.

Я загружаюизображение как это:

$('#drop-zone').bind('drop', drop);

function drop(e) {
    e.stopPropagation();
    e.preventDefault();
    e.dataTransfer = e.originalEvent.dataTransfer;
    traverseFiles(e.dataTransfer.files);
}

traverseFiles делает цикл foreach для каждого файла и вызывает функцию загрузки, там я делаю это:

xhr = new XMLHttpRequest();

//some event listners for processing, on load

xhr.open("post", "core/plugins/upload/upload.class.php", true);

xhr.setRequestHeader("Content-Type", "multipart/form-data");
xhr.setRequestHeader("X-File-Name", file.name);
xhr.setRequestHeader("X-File-Size", file.size);
xhr.setRequestHeader("X-File-Type", file.type);

xhr.send(file);

тогда в php, который я нашел с помощью этого, получиммне необработанные данные изображения

$file = file_get_contents('php://input');

РЕДАКТИРОВАТЬ: решение найдено

$fh = fopen($savedir, 'w') or die("can't open file");
fwrite($fh, $file);
fclose($fh);

Ответы [ 2 ]

3 голосов
/ 20 марта 2012

Предполагая, что вам удалось получить необработанный файл из ввода PHP, он, вероятно, будет закодирован в base64.Вот простой пример:

<?php
//decode file
$image = base64_decode($file);

// write it
$filename = "myfile.png";
$fh = fopen($filename, 'w') or die("can't open file");
fwrite($fh, $image);
fclose($fh);

Редактировать См. Комментарии, файл не был закодирован в результате запроса.

1 голос
/ 20 марта 2012

move_uploaded_file не то, что вы хотите.Если вы отправили файл с обычным запросом POST (а не через Ajax), тогда вы бы использовали move_uploaded_file.

$file, содержащий необработанные двоичные данные для изображения.Все, что вам нужно сделать, это записать эти данные в файл (принимая во внимание правильную обработку разрывов строк), и все готово.Начните с fopen и посмотрите, как далеко вы продвинулись.

Я предполагаю, что $file был успешно заполнен двоичными данными, и вы проверили это.Если нет, то у вас есть другая проблема на стороне javascript.

Редактировать: вы также можете найти это полезным.

...