deleted-tnorman
@deleted-tnorman

Как организовать загрузку фала с его переименованием php+ajax?

Добрый день.
Интересует вот какой вопрос.
Немного покопавшись в простеньком плагине для ajax-загрузки файлов, основанном на jquery.fileupload.js решил собрать такой же, но только с возможностью менять имя файла перед загрузкой.

На стороне клиента у меня при вбрасывании файлов, в input выводится текущее имя каждого.
VeBpeWM.png
s3meKWa.png

В этом нет ничего удивительного и иновационного, это ясно и ежу. А узнать я хочу вот о чем.

Сейчас моя попытка организовать задуманное основывается на следующем.

После вбрасывания файлов в форму, нужно подтвердить загрузку для каждого.
Так как переименовать (как я понял) можно только на севере, я хочу отправлять в догонку с Файл-запросом, Пост запрос из инпута с именем, при подтверждении его загрузки.

$.post('upload.php', { 
      file_name: tpl.find('input.changeName').val()
}).success(function(data){
      console.log(data);
});


На стороне сервера у меня вот такой вот код
// A list of permitted file extensions
$allowed = array('png', 'jpg', 'gif', 'zip', 'txt');

if(isset($_FILES['upl']) && $_FILES['upl']['error'] == 0){

	$extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);

	if(!in_array(strtolower($extension), $allowed)){
		echo '{"status":"error"}';
		exit;
	}

	if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
		echo '{"status":"success"}';
		exit;
	}
}

echo '{"status":"error"}';
exit;


Я отправлял обычным json-объектом чере $.post и оно доходит до сервера. Но по личным ощущениям два этих события (загрузка файла) и (пост реквест) не встречаются на сервере и соответственно их не удается подружить.
У меня постоянно есть чувство, что я делаю ненужный велосипед, но я очень неопытен в данных вопросах, буду благодарен любому действенному методу.
Посоветуйте пожалуйста, как это лучше сделать?
  • Вопрос задан
  • 2720 просмотров
Решения вопроса 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
различные ajax запросы между собой никак не связаны по определению.
т.е сохранение имени файла - это вообще независимая операция.
отдельно сохраняете файл, возвращаете в js какой то его идентификатор
вторым запросом передаете идентификатор и что вы там хотите сохранить.

Отдельно хочу подчеркнуть, что загрузка файлов под оригинальными именами - это источник адских головных болей и уязвимостей в будущем. Все файлы необходимо обязательно ренеймить, в идеале убирая/перезаписывая расширение.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы