PHP Jquery文件上载//用户名/会话目录

时间:2015-06-29 18:10:11

标签: php session file-upload jquery-file-upload blueimp

我一直在使用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,电子邮件以及其他任何内容,但变量/令牌不会转换为上载目录脚本。

提前感谢任何输入。

2 个答案:

答案 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});
        });

});

}