繁体   English   中英

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

[英]Permission error on upload with blueimp jQuery-File-Upload

我对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>

根据文档

网址

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

这应该是一个上载处理程序,例如PHP脚本,它将执行验证,命名和将文件移动到位的工作。 您上面显示的代码甚至还包含一条注释,说明同一件事:

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

但似乎您正在使用url指定目标目录来保存文件到:

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

blueimp / jQuery-File-Upload发行版包含一组用于服务器端实现的PHP文件 ,看来index.php应该是您应该指向url的文件。 我不熟悉插件或后端处理程序,但是通过查看源代码,我可以看到在第47行指定了上传目录的位置:

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

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

至于为什么看到403 Forbidden错误:您已将目录指定为url ,因此fileupload将在其中发布文件。 您的url没有斜杠( upload/2017/abcd ), Apache会将其作为GET 转发带有斜杠的相同目录。 由于目录中没有合适的索引文件来处理请求(没有index.htmlindex.php和/或您在Apache中配置为DirectoryIndex任何文件),因此Apache将尝试执行目录列表。 但是,您已禁用目录列表( Options -Indexes ),因此您得到403 Forbidden 通过浏览器devtools,单击“网络”选项卡,然后查看那里的请求,您应该能够验证所有这些信息。

附带说明一下,您在Javascript中为fileupload()指定了upload_dirupload_url选项,但这些是我上面链接到的后端PHP处理程序中的变量。 它们是PHP变量,不会对Javascript产生任何影响,因此应删除它们以避免混淆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM