UploadError 403 в swfupload для Firefox - PullRequest
       17

UploadError 403 в swfupload для Firefox

3 голосов
/ 16 февраля 2010

Я пытаюсь загрузить файлы, используя swfuploder, и он отлично работает в IE. Но он получает «UploadError 403» в Firefox. Я использую apache-tomcat-6.0.16 и не могу получить доступ к файлу .htaccess.

Это мой код для swfupload.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head>
        <title>SWFUpload Demos - Simple Demo</title>
        <link href="../css/default.css" rel="stylesheet" type="text/css" />
        <script type="text/javascript" src="../js/swfupload/demos/swfupload/swfupload.js"></script>
        <script type="text/javascript" src="../js/swfupload/demos/simpledemo/js/swfupload.queue.js"></script>
        <script type="text/javascript" src="../js/swfupload/demos/simpledemo/js/fileprogress.js"></script>
        <script type="text/javascript" src="../js/swfupload/demos/simpledemo/js/handlers.js"></script>
        <script type="text/javascript">
            var swfu;
            window.onload = function() {
                var settings = {
                    flash_url : "../js/swfupload/demos/swfupload/swfupload.swf",
                    upload_url: "upload_pages/uploader.jsp",
                    post_params: {"PHPSESSID" : ""},
                    file_size_limit : "100 MB",
                    file_types : "*.*",
                    file_types_description : "All Files",
                    file_upload_limit : 100,
                    file_queue_limit : 0,
                    custom_settings : {
                        progressTarget : "fsUploadProgress",
                        cancelButtonId : "btnCancel"
                    },
                    debug: true,
                    prevent_swf_caching: true,

                    // Button settings
                    button_image_url: "../js/swfupload/demos/simpledemo/images/TestImageNoText_65x29.png",
                    button_width: "65",
                    button_height: "29",
                    button_placeholder_id: "spanButtonPlaceHolder",
                    button_text: '<span class="theFont">Upload</span>',
                    button_text_style: ".theFont { font-size: 16; }",
                    button_text_left_padding: 12,
                    button_text_top_padding: 3,

                    // The event handler functions are defined in handlers.js
                    file_queued_handler : fileQueued,
                    file_queue_error_handler : fileQueueError,
                    file_dialog_complete_handler : fileDialogComplete,
                    upload_start_handler : uploadStart,
                    upload_progress_handler : uploadProgress,
                    upload_error_handler : uploadError,
                    upload_success_handler : uploadSuccess,
                    upload_complete_handler : uploadComplete,
                    queue_complete_handler : queueComplete
                };

                swfu = new SWFUpload(settings);
            };
        </script>
    </head>
    <body>
        <div id="content">
            <h2>File Upload</h2>
            <form id="form1" method="post" enctype="multipart/form-data">
                <div class="fieldset flash" id="fsUploadProgress">
                    <span class="legend">Upload Queue</span>
                </div>
                <div id="divStatus">0 Files Uploaded</div>
                <div>
                    <span id="spanButtonPlaceHolder"></span>
                    <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
                </div>
            </form>
        </div>
    </body>
</html>

Я пытался использовать как абсолютный, так и относительный URL для «upload_url», но появляется та же ошибка «uploadError 403». Но это работает для IE.

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

У меня похожая проблема, но в apache / PHP. Так что я связываю возможное решение здесь.

Из того, что я обнаружил, похоже, проблема безопасности при аутентификации сеанса на сервере, на котором установлены расширения безопасности (например, защита / шифрование сеанса), которая заставляет сервер думать, что HTML-страница и загрузчик SWF являются разными пользователями, вызывая ошибку 403. http://imagevuex.com/forum/viewtopic.php?f=27&t=4337

Также убедитесь, что mod_security отключен, и попробуйте добавить эти настройки .htaccess, похоже, он работает для некоторых.

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

Похоже, другое решение (также .htaccess), от http://www.ramirezcobos.com/2010/01/05/swfupload_0_0-error-http-status-403-solved/

SetEnvIfNoCase Content-Type “^multipart/form-data;” “MODSEC_NOPOSTBUFFERING=Do not buffer file uploads”

Наконец, Firefox может быть найдена здесь ошибка cookie http://topecoders.blogspot.com/2010/06/solution-for-flash-cookie-bug.html

1 голос
/ 16 февраля 2010

Код статуса HTTP 403 означает Запрещено . Это ошибка аутентификации. Запрос требует аутентифицированного пользователя (вошедшего в систему пользователя), но либо пользователь отсутствует в сеансе, либо не найден связанный сеанс.

Я никогда не использовал SWFUpload, но похоже, что он не передавал файл cookie jsessionid вместе с запросом на сторону сервера, так что сторона сервера не может идентифицировать клиента. Погуглив " swfupload jsessionid ", вы также узнаете, что вы не единственный, кто столкнулся с этой конкретной проблемой. Чтобы это исправить, вам нужно добавить jsessionid к URL в настройках:

upload_url: "upload_pages/uploader.jsp;jsessionid=${pageContext.session.id}",

Тем не менее, следующая строка

post_params: {"PHPSESSID" : ""},

тоже выглядит подозрительно. Что делает пустой идентификатор сеанса PHP в среде JSP / Servlet? Разве вы не упускаете это из виду и не забываете при копировании чужого кода?

...