我一直在使用Blueimp的Jquery文件上传乱用PHP几周,我遇到了一些问题。我正在教自己如何使用PHP进行编程,所以我仍然适应了事情的运作方式,所以对于任何混淆道歉,我会尽力澄清。
我需要将用户上传内容插入上传目标目录中的特定用户名文件夹中。我已经按照大量的写入,答案和常见问题解答来打开所述用户目录(对于这个插件),并且最好是为会话创建一个带有misc字符串的文件夹。但是,无论用户名如何,所有上传都会转到同一文件夹,而不是用户的相应文件夹。是否可以告诉脚本读取并使用特定的用户名/ id / etc作为变量?我很确定它是,但目前我找不到一个明确的方法。为了清楚起见,我试图保持我的代码基本和类似于已发布的Blueimp版本。
所以,这就是。
**工作:**用户注册,信息被插入数据库,在上传目录中自动创建相应的用户名文件夹,耐心等待充满美味的文件。
**不工作:**上传脚本未读取用作目标文件夹名称的用户名/变量。执行时,“Error SyntaxError:Unexpected token<”返回,并将上传的文件插入父“/ uploads /”文件夹。
index.php(在原始服务器/ php /目录中)
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
$upload_handler = new UploadHandler();
UploadHandler.php
function __construct($options = null, $initialize = true, $error_messages = null) {
$this->response = array();
$this->options = array(
'script_url' => $this->get_full_url().'/'.basename($this->get_server_var('SCRIPT_NAME')),
'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/../../uploads/'.$username.'/',
'upload_url' => $this->get_full_url().'/../../uploads/'.$username.'/',
'user_dirs' => false,
'mkdir_mode' => 0755,
'param_name' => 'files',
我的理解是需要定义$ username变量,但是我丢失的位置和方式。我可以进行页面调用并在页面上打印用户名,ID,电子邮件以及其他任何内容,但变量/令牌不会转换为上载目录脚本。
提前感谢任何输入。
答案 0 :(得分:0)
您需要编辑index.php以设置$username
变量。
将代码更新为:
require('UploadHandler.php');
$upload_handler = new UploadHandler($username);
在UploadHandler.php文件中,将__construct
更新为:
function __construct($username, $options = null, $initialize = true, $error_messages = null) {
它现在应该捕获正在传递的$username
。
答案 1 :(得分:0)
你可以尝试恢复原始服务器/ php / UploadHandler.php然后在wiki中关注这篇文章:
jQuery-File-Upload wiki - PHP-user-directories
"要提供您自己的实现,您可以覆盖get_user_id方法"
编辑index.php:
<?php
error_reporting(E_ALL | E_STRICT);
require('UploadHandler.php');
class CustomUploadHandler extends UploadHandler {
protected function get_user_id() {
return $_REQUEST['username'];
}
protected function set_additional_file_properties($file) {
$file->deleteUrl = $this->options['script_url']
.$this->get_query_separator($this->options['script_url'])
.$this->get_singular_param_name()
.'='.rawurlencode($file->name)
.'&username='.$_REQUEST['username']
;
$file->deleteType = $this->options['delete_type'];
if ($file->deleteType !== 'DELETE') {
$file->deleteUrl .= '&_method=DELETE';
}
if ($this->options['access_control_allow_credentials']) {
$file->deleteWithCredentials = true;
}
}
}
$upload_handler = new CustomUploadHandler(array(
'user_dirs' => true,
));
和main.js
$(function () {
'use strict';
// Initialize the jQuery File Upload widget:
$('#fileupload').fileupload({
// Uncomment the following to send cross-domain cookies:
//xhrFields: {withCredentials: true},
url: 'server/php/index.php?username=' + username,
});
// Enable iframe cross-domain access via redirect option:
$('#fileupload').fileupload(
'option',
'redirect',
window.location.href.replace(
/\/[^\/]*$/,
'/cors/result.html?%s'
)
);
// Load existing files:
$('#fileupload').addClass('fileupload-processing');
$.ajax({
// Uncomment the following to send cross-domain cookies:
//xhrFields: {withCredentials: true},
url: $('#fileupload').fileupload('option', 'url'),
dataType: 'json',
context: $('#fileupload')[0]
}).always(function () {
$(this).removeClass('fileupload-processing');
}).done(function (result) {
$(this).fileupload('option', 'done')
.call(this, $.Event('done'), {result: result});
});
});
}