plupload 运行时在尝试访问 upload.php 时返回 403 FORBIDDEN 错误

Posted

技术标签:

【中文标题】plupload 运行时在尝试访问 upload.php 时返回 403 FORBIDDEN 错误【英文标题】:plupload runtimes returning 403 FORBIDDEN error when trying to access upload.php 【发布时间】:2013-04-22 10:30:53 【问题描述】:

简介

我试图在一个可能很复杂的环境中实现一些相对简单的事情。我想使用 plupload jQuery UI plugin 将文件从 javascript 小部件 (Netvibes UWA format) 上传到本地 Intranet 服务器。

问题

我的代码设置似乎正确 - plupload 容器出现,我可以愉快地选择和上传文件。上传似乎工作 - 每个文件都达到 100% - 但是当我检查我的 Firebug 控制台时,我收到以下错误:

OPTIONS upload.php - 403 Forbidden

并且文件没有上传到我指定的files 目录。

环境

源服务器是frogserver.curriculum.local,内部IP 192.168.3.15 收件人服务器是 staff.curriculum.local,内部 IP 为 192.168.3.60 源服务器是 linux,但我无法直接访问 html/JS/PHP/SQL,一切都必须通过上述 Netvibes Universal Widget API 完成。这是 www.frogtrade.com 提供的封闭式虚拟学习环境解决方案 接收服务器是 Windows/IIS

代码

JavaScript

widget.onLoad = function()
    $( "#datetime" ).datepicker( dateFormat: "yy-mm-dd" );
    Input.init();

    /* plupload */
    $("#uploader").plupload(
        // General settings
        runtimes : 'html5,flash,html4',
        url : 'http://staff.curriculum.local/frog/LOTS/upload.php',
        max_file_size : '1000mb',
        max_file_count: 20, // user can add no more then 20 files at a time
        chunk_size : '1mb',
        rename: true,
        multiple_queues : true,

        // Resize images on clientside if we can
        resize : width : 320, height : 240, quality : 90,

        // Rename files by clicking on their titles
        rename: true,

        // Sort files
        sortable: true,

        // Specify what files to browse for
        filters : [
            title : "Image files", extensions : "jpg,gif,png",
            title : "Zip files", extensions : "zip,avi"
        ],

        // Flash settings
        flash_swf_url : '/user/74/186718.swf'
    );

    // Client side form validation
    $('form').submit(function(e) 
        var uploader = $('#uploader').plupload('getUploader');

        // Files in queue upload them first
        if (uploader.files.length > 0) 
            // When all files are uploaded submit form
            uploader.bind('StateChanged', function() 
                if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) 
                    $('form')[0].submit();
                
            );

            uploader.start();
         else
            alert('You must at least upload one file.');

        return false;
    );

HTML

<form  method="post" action="../dump.php">
    <div id="uploader">
        <p>Your browser doesn't have Flash, Silverlight, Gears, BrowserPlus or HTML5 support.</p>
    </div>
</form>

PHP

我使用的 PHP 脚本是捆绑的 upload.php 文件处理脚本,在顶部添加了以下代码:

// * - stands for all domains
header("Access-Control-Allow-Origin: *");

我也更改了上传目录目标:

// Settings
//$targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload";
$targetDir = 'files';

想法

我不确定这是否属于“跨域”文件传输?我尝试将其设置为原样,因此我的 PHP 脚本中的 Access-Control-Allow-Origin 标头 Netvibes UWA 和 VLE 设置可能会以某种方式阻碍 Internet 访客帐户的 LOTS 文件夹上的 IIS 权限似乎是正确的(即“读取”权限),但我不完全确定;它在“特殊权限”上有“拒绝”,我似乎看不到这些权限是什么,或者改变它

编辑:IIS 权限

刚刚检查过,一切似乎都是正确的:

【问题讨论】:

纯粹为您在帖子中付出的努力而投票,真心希望您能尽快解决这个问题。 您是否尝试设置完整的 777 权限只是为了查看权限是否起作用? 谢谢决斗。我刚刚仔细检查过,IIS 来宾帐户只有WRITE 访问被拒绝。我认为这不是问题所在 - Firebug 似乎报告 READ 对我的 upload.php 脚本的访问被拒绝。 我添加了来自 IIS 的权限截图。 混蛋,至少那排除了权限! 【参考方案1】:

[编辑] CORS

由于权限似乎没问题,这可能是 CORS 问题。

我偶然发现了monsur 对这个问题的回答:Is it possible to use XMLHttpRequest across Domains,引用:

一个 CORs 请求实际上由两个物理 HTTP 请求组成:1) 预检请求,以及 2) 实际请求。您发布的请求 上面看起来像预检请求,因为它使用 HTTP 选项方法。所以你要做的第一件事就是验证你的 服务器接受 OPTIONS 请求(我相信这应该可以工作,但是 它可以解释为什么您会收到 403)。

权限

据此doc:

为您上传的内容创建一个单独的文件夹并更改 NTFS 上传文件夹的文件权限

通过这样做,您可以配置上传内容的行为 不同于您的 Web 应用程序的其余部分。授予上传 文件夹 IIS 工作进程标识的读取和写入权限。 对于 Windows Server 2003 中的 IIS 6.0,您可以使用 IIS_WPG 用户组 为了这。对于 IIS 7.0 及更高版本,您可以使用 IIS_IUSRS 用户组。

您可能检查了错误用户的权限 (IUSR_ASHVOIP),请尝试 IIS_WPG(似乎适合您)或 IIS_IUSRS取决于您的配置。

【讨论】:

感谢您的帮助,比古德。我刚刚要求我们的网络管理员添加这些权限(然后我自己检查了它们),但遗憾的是,脚本仍然在做同样的事情:( 作为参考,我们在LOTS 文件夹和LOTS\files 子文件夹中将Full Control 分配给IIS_WPGIIS_IUSRS @dunc 编辑了我的答案,这可能是 CORS 的问题。看看 SO 链接! 再次感谢 Bigood(为您 +1),但即使使用额外的 CORS 标头,我也遇到了同样的问题。猜猜问题出在我的 VLE 和 UWA 小部件设置上... :( @dunc 我不能再帮你了,对不起!如果您找到解决方案,请告诉我们,我很好奇!

以上是关于plupload 运行时在尝试访问 upload.php 时返回 403 FORBIDDEN 错误的主要内容,如果未能解决你的问题,请参考以下文章

plupload.Uploader多文件上传

Plupload插件使用整理

如何使用 PLupload 发送附加数据?

Plupload 错误 -200 HTTP 错误

plupload如何限制上传文件数量,限制只能上传单个文件

前端上传控件plupload总结