【发布时间】:2012-10-11 18:53:43
【问题描述】:
我正在使用 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!');
}
}
});
});
上传.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";
}
}
?>
【问题讨论】:
-
你知道你只需要写一次长格式的
jQuery吗?通过将代码包装在(function($) { .... })(jQuery);中,无论noConflict是否被使用,您都可以使用$。在您的代码中,您甚至可以在第一行使用jQuery(function($) {,然后在函数中使用$。 -
你为什么使用
addslashes()?没有必要这样做。 -
对不起,我粘贴了错误的代码。 OP 使用正确的 upload.php 代码更新。该脚本正在运行,但上传的文件附加了随机数,但输出到
$('input[type=text]').text(url + file);的文件名缺少该数字。
标签: php ajaxuploader