使用blueimp jQuery-File-Upload上传时的权限错误

时间:2017-10-21 09:39:47

标签: php jquery jquery-file-upload blueimp

我遇到了jQuery-File-Upload的问题。我将它与PHP代码一起使用,我会根据记录的用户将文件上传到不同的文件夹中。 例如,如果记录的用户有代码' abcd',我会在&upload; 2017 / abcd /'上传文件。

要做到这一点,我写了这段代码:

$(function () {
        'use strict';
        // Change this to the location of your server-side upload handler:
        var url = 'upload/<?= $year?>/<?= $logged_user?>';
        $('#fileupload').fileupload({
            acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
            upload_dir: url,
            upload_url: url,
            url: url,
            dataType: 'json',
            done: function (e, data) {
                $.each(data.result.files, function (index, file) {
                    $('<p/>').text(file.name).appendTo('#files');
                });
            },
            progressall: function (e, data) {
                var progress = parseInt(data.loaded / data.total * 100, 10);
                $('#progress .progress-bar').css(
                    'width',
                    progress + '%'
                );
            }
        }).prop('disabled', !$.support.fileInput)
            .parent().addClass($.support.fileInput ? undefined : 'disabled');
    });

文件夹存在,并且具有正确的权限(0777),但是当我尝试上传时,出现此错误消息:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>403 Forbidden</title>
</head><body>
<h1>Forbidden</h1>
<p>You don't have permission to access /upload/2017/abcd/ on this server.<br />
</p>
</body></html>

1 个答案:

答案 0 :(得分:0)

According to the docs

  

网址

     

包含发送请求的URL的字符串。

这应该是一个上传处理程序,例如PHP脚本,它将执行验证,命名和移动文件的工作。您在上面显示的代码甚至包括一个评论说同样的事情:

// Change this to the location of your server-side upload handler:

但看起来您正在使用url指定目标目录以保存文件:

var url = 'upload/<?= $year?>/<?= $logged_user?>';

用于服务器端实现的blueimp / jQuery-File-Upload发行版includes a set of PHP files,看起来index.php应该是你应该指向的url。我不熟悉插件或后端处理程序,但查看源代码我可以看到指定上传目录的位置,on line 47

'upload_dir' => dirname($this->get_server_var('SCRIPT_FILENAME')).'/files/',

这是您可以进行year/user/目录自定义的地方。

至于您看到403 Forbidden错误的原因:因为您已将目录指定为urlfileupload将在其中发布文件。您的url没有尾部斜杠(upload/2017/abcd)和Apache will forward that - 作为GET - 与尾随斜杠的同一目录。由于目录中没有合适的索引文件来处理请求(没有index.htmlindex.php和/或在Apache中配置为DirectoryIndex的任何内容,因此Apache将尝试执行此操作目录列表。但是,您已禁用目录列表(Options -Indexes),因此您获得了403 Forbidden。您应该能够通过查看浏览器devtools,单击“网络”选项卡并检查其中的请求来验证所有这些。

作为旁注,您要在Javascript中为upload_dir指定upload_urlfileupload()选项,但这些是我在上面链接的后端PHP处理程序中的变量。他们是PHP变量,并且在您的Javascript中没有任何效果,您应该删除它们以避免混淆。