我正试图在一个可能复杂的环境中实现相对简单的事情。我想使用Netvibes UWA format从JavaScript小部件(plupload jQuery UI plugin)上传文件到本地Intranet服务器。
我的代码设置似乎正确 - plupload
容器出现了,我可以愉快地选择和上传文件。上传似乎有效 - 每个文件都达到100% - 但是当我检查我的Firebug控制台时,我收到以下错误:
OPTIONS upload.php - 403 Forbidden
文件不上传到我指定的files
目录。
frogserver.curriculum.local
staff.curriculum.local
的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';
Access-Control-Allow-Origin
标题刚检查过,一切似乎都正确:
答案 0 :(得分:1)
由于权限似乎没问题,这可能是一个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 取决于您的配置。