Я пытаюсь достичь чего-то относительно простого, в потенциально сложной среде. Я хотел бы загрузить файлы из виджета JavaScript ( формат Netvibes UWA ) на локальный сервер интрасети, используя плагин plupload jQuery UI .
Я правильно настроил свой код – plupload
контейнер plupload
и я могу с радостью выбирать и загружать файлы. Загрузка, похоже, работает – каждый файл достигает 100%, но когда я проверяю консоль Firebug, я получаю следующую ошибку:
OPTIONS upload.php - 403 Forbidden
И файлы не загружаются в указанный каталог files
.
frogserver.curriculum.local
сервером является frogserver.curriculum.local
на внутреннем IP 192.168.3.15 staff.curriculum.local
на внутреннем IP 192.168.3.60 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
сценарий upload.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
в моем скрипте PHP Просто проверено, и все кажется правильным:
Поскольку разрешения кажутся хорошо, это может быть проблема CORS.
Я наткнулся на ответ monsur на этот вопрос: возможно ли использовать XMLHttpRequest через Домены , цитируя:
Запрос CORs фактически состоит из двух физических HTTP-запросов: 1) запрос предварительной проверки и 2) фактический запрос. Запрос, который вы разместили выше, похож на запрос предполетной проверки, поскольку он использует метод HTTP OPTIONS. Итак, первое, что вам нужно сделать, это проверить, что ваш сервер принимает запросы OPTIONS (я считаю, что это должно сработать, но это может объяснить, почему вы получаете 403).
Согласно этому документу :
Создайте отдельную папку для загруженного контента и измените разрешения файлов NTFS в папке загрузки
Делая это, вы можете настроить поведение загруженного контента по-другому от остальной части вашего веб-приложения. Предоставьте загрузочную папку для чтения и записи для идентификатора рабочего процесса IIS. Для IIS 6.0 в Windows Server 2003 для этого можно использовать группу пользователей IIS_WPG . Для IIS 7.0 и более поздних версий вы можете использовать группу пользователей IIS_IUSRS .
Возможно, вы проверяете разрешения для неправильного пользователя ( IUSR_ASHVOIP ), попробуйте IIS_WPG (кажется, это для вас) или IIS_IUSRS в зависимости от вашей конфигурации.