【问题标题】:Permission error on upload with blueimp jQuery-File-Upload使用 blueimp jQuery-File-Upload 上传时出现权限错误
【发布时间】:2017-10-21 09:39:47
【问题描述】:

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

【问题讨论】:

  • 文件夹上传中有文件夹(2017)AND(abcd)?
  • 是的,我已经写过“文件夹存在”
  • 对 0777 的测试权限(上传,2017,abcd)。
  • chmod -R 0777 upload 将更改所有目录和子目录,如 2017、abcd 等,并使任何用户/组都可以访问以更改目录。对于 Windows:右键单击文件夹并更改权限
  • 我只是在尝试!也许我只能在一个设置的文件夹上上传文件,我不能动态更改....

标签: php jquery jquery-file-upload blueimp


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2015-03-06
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多