JQuery文件上载自定义路径问题

时间:2013-08-14 08:04:31

标签: php image-uploading jquery-file-upload

我正在使用JQuery文件上传插件,以增加将文件上传到我的网站的可能性。

上传脚本位于“index.php?cartella_id = x”之类的页面中(x是表示相册ID的数字)。

我想存储这样的文件:

server/php/files
- directory 1/
- - Image x
- - Image y
- directory 2/
- - Image z
- - Image z(2)

我基本上想为每张专辑创建一个不同的目录。

像我想要的那样存储图像并不难,因为我通过使用像这样的形式的隐藏输入来传递$ cartella_id

<input type="hidden" name="cartella_id" value="<?php echo $cartella_id; ?>">

在server / php / index.php文件中,我检查用户是否已登录,以及该专辑是否像这样存在

session_start();
if(!isset($_SESSION["username"])) {
    die();
    }


if(isset($_REQUEST["cartella_id"])) {
    $cartella_id = (int) $_REQUEST["cartella_id"];
    $sql = "SELECT * FROM cartelle WHERE cartella_id = $cartella_id";
    $query = mysql_query($sql);
    if($cartella = mysql_fetch_array($query)) {
        $upload_dir = '/files/'.$cartella_id.'/';
        } else {
        die();
        }
} else {
    die();
}

在UploadHandler.php页面中,我编辑了'upload_dir'和'upload_url'选项。

'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/'.$_REQUEST["cartella_id"].'/',
            'upload_url' => $this->get_full_url().'/files/'.$_REQUEST["cartella_id"].'/',

上传工作正常...问题是,如果我刷新上传页面,我看不到已经上传的文件,如脚本会在没有指定自定义路径时显示。我可以使用$ _SESSION来解决这个问题,但我不喜欢这个解决方案,删除按钮在任何情况下都不起作用。

我研究了很多PHP代码,我也搜索了很多,但我找不到适合我的解决方案。

当脚本检查现有文件时,如何发送自定义变量(我找不到那段代码)? 如何使删除按钮有效?

提前致谢

2 个答案:

答案 0 :(得分:1)

所以我通过编辑js / main.js解决了第一个问题(即使在重新加载页面后使文件可见)。 我编辑了这个:

url: $('#fileupload').fileupload('option', 'url'),

到这个

url: ($('#fileupload').fileupload('option', 'url') + "?cartella_id="+ document.getElementById('cartella_id').value),

仍然必须使删除按钮工作。

答案 1 :(得分:0)

我有同样的问题,我解决了它启用用户目录并覆盖类UploadHandler中的方法,如下所示:

jQuery-File-Upload PHP-user-directories

我在删除网址中添加了一个额外的参数。

我的index.php:

<?php

error_reporting(E_ALL | E_STRICT);

require('UploadHandler.php');

class CustomUploadHandler extends UploadHandler {

    protected function get_user_id() {
        return $_REQUEST['recordId'];
    }

    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)
            .'&recordId='.$_REQUEST['recordId']
            ;
        $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?recordId=' + recordId,
    });

    // 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});
        });

});

}

我没有编辑UploadHandler.php