Adding Random Number to Uploaded File
Я использую скрипт Valum Ajax-Uploader для загрузки файлов на мой сервер. Поскольку существует большая вероятность того, что загруженные файлы имеют одинаковое имя, я добавляю случайное число к имени файла. Проблема в том, что загрузчик ajax возвращает исходное имя файла в input[type=text]
вместо нового имени файла с добавленным случайным числом. я пробовал echo $file;
вместо echo "success";
, но все, что происходит, это то, что файл загружен, и скрипт возвращается с ошибкой всплывающего окна.
jQuery(function() {
var url = "http://example.com/uploads/samples/";
var button = jQuery('#up');
new AjaxUpload(button, {
action: 'upload.php',
name: 'upload',
autoSubmit: true,
onSubmit: function(file, ext) {
// do stuff while file is uploading
},
onComplete: function(file, response) {
if (response === "success") {
$('input[type=text]').val(url + file);
} else {
jAlert('Something went wrong!', 'Error!');
}
}
});
});
upload.php
<?php
$uploaddir = '/path/to/uploaddir/';
$file = basename($_FILES['file']['name']);
if($_FILES['file']['name']) {
$file = preg_replace('/\s+/', '_', $file);
$rand = rand(0000,9999);
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $rand . $file)) {
echo "success";
} else {
echo "error";
}
}
?>
3 ответа
Код клиента и код сервера существуют совершенно независимо друг от друга. По сути, ваш код JavaScript не имеет возможности узнать, что только что сделал ваш код PHP. url
не обновляется автоматически при изменении его в файле PHP.
Альтернативным решением было бы заставить ваш PHP-код отображать новое имя файла или сообщение об ошибке.
Например:
PHP
<?php
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploaddir . $rand . $file)) {
// Everything went well! Echo the dollar sign ($) plus the new file name
echo '$' . $_FILES['file']['tmp_name'], $uploaddir . $rand . $file;
} else {
echo "error";
}
?>
JS
onComplete: function(file, response) {
// If the first character of the response is the "$" sign
if (response.substring(0,1) == "$") {
$('input[type=text]').val(response.substring(1));
} else {
jAlert('Something went wrong!', 'Error!');
}
}
+ Изменить
$('input[type=text]').text(url + file);
к
$('input[type=text]').val(url + file);
Я хотел бы предложить использовать дату и время для создания уникального случайного числа. Вы можете использовать следующую функцию в своем коде, я полностью доверяю этой функции, потому что я уже использую это в своем проекте.
` / ** * Эта функция возвращает уникальную строку в качестве ключа */ публичная статическая функция getUniqueKey(){ $currentDateTime = date("YmdHisu"); вернуть $ currentDateTime. BTITTools:: createRandomString (3); } `