PDA

Просмотр полной версии : Загрузить файл на сервер из BytesArray


Aprofen
22.04.2018, 19:59
Всем здравствуйте!

У меня возникла некая проблема.

Есть звуковой wav файл, который содержится в BytesArray.

Необходимо отправить его на сервер. Как я уже только не пробовал... Ничего не выходит.

через

fileReferenceSave.save(byteArray, "test.wav");

всё прекрасно сохраняется, файл воспроизводиться. Но как отправить его на сервер?!

ZergMaster
23.04.2018, 19:12
Как я уже только не пробовал
Как вы не пробовали?

Aprofen
23.04.2018, 19:16
Как вы не пробовали?


в данный момент файл у меня отправляется так:

var loader:URLLoader = new URLLoader();
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var variables:URLVariables = new URLVariables();
var request:URLRequest = new URLRequest("http://sute.ru/");
request.requestHeaders.push(header);
request.method = URLRequestMethod.POST;
request.data = wav_file;
loader.load(request);

должен заметить, он отправляется, в содержимом - содержимое файла

но как такое принять на сервере? массив $_FILES НИЧЕГО не видит.

а мне нужно принять файл на сервере и сохранить... замкнутый круг

caseyryan
24.04.2018, 12:54
Примерно как-то так

if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
$fp = fopen( "someFileName.wav", 'wb' );
fwrite($fp, $GLOBALS["HTTP_RAW_POST_DATA"]);
fclose($fp );
}

Но надо учитывать, что это не безопасный способ, без каких-либо проверок. Злоумышленник через эту дыру сможет любой эксплойт загрузить, и сделать с сервером практически всё, что угодно.
Хотя чисто задачу сохранения переданного файла этот код выполняет

п.с. Ну и надо конечно же директорию указать, куда этот файл сохранять. Этот код сохранит файл прямо рядом с PHP файлом, если эта директория доступна для записи. Если нет, то ничего не загрузит

Aprofen
24.04.2018, 13:14
Примерно как-то так

if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {
$fp = fopen( "someFileName.wav", 'wb' );
fwrite($fp, $GLOBALS["HTTP_RAW_POST_DATA"]);
fclose($fp );
}

Но надо учитывать, что это не безопасный способ, без каких-либо проверок. Злоумышленник через эту дыру сможет любой эксплойт загрузить, и сделать с сервером практически всё, что угодно.
Хотя чисто задачу сохранения переданного файла этот код выполняет

п.с. Ну и надо конечно же директорию указать, куда этот файл сохранять. Этот код сохранит файл прямо рядом с PHP файлом, если эта директория доступна для записи. Если нет, то ничего не загрузит


да, такой способ я знаю, но в том-то и дело, что так можно загрузить что угодно на сервер. А как обезопасить загрузку?

caseyryan
24.04.2018, 14:13
Это уже выходит за рамки темы. Вопрос был как сохранить на сервер
Но, тем не менее, можно сделать как минимум 4 вещи:
1) Во-первых защитить запросы от банальных null-byte-injection, и сделать удаление спецсимволов (в нете куча инфрмации по этому поводу)
2) Сохранять файл в директорию, из которой сервер не может его выполнять как скрипт. Даже если кто-то загрузит туда php скрипт, он будет вопсриниматься как простой текст
3) Правильно расставить права на запись / удаление директорий и файлов на сервере
4) Чтобы туда не грузанули какой-нибудь hd фильм (а то и с десяток оных)), к примеру, можно ограничить объем сохраняемого файла. Как это сделать - гугл в помощь