【问题标题】:uploadify scriptData problemuploadify script数据问题
【发布时间】:2009-11-24 16:27:39
【问题描述】:

我在上传时遇到了 scriptData 的问题,我很确定配置语法没问题,但无论我做什么,scriptData 都不会传递给上传脚本。

我在 FF 和 Chrome 中使用 flash v. Shockwave Flash 9.0 r31 进行了测试

这是配置:

    $(document).ready(function() {
    $('#id_file').uploadify({
        'uploader'          : '/media/filebrowser/uploadify/uploadify.swf',
        'script'            : '/admin/filebrowser/upload_file/',
        'scriptData'        : {'session_key': 'e1b552afde044bdd188ad51af40cfa8e'},
        'checkScript'       : '/admin/filebrowser/check_file/',
        'cancelImg'         : '/media/filebrowser/uploadify/cancel.png',
        'auto'              : false,
        'folder'            : '',
        'multi'             : true,
        'fileDesc'          : '*.html;*.py;*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff;*.mp3;*.mp4;*.wav;*.aiff;*.midi;*.m4p;*.mov;*.wmv;*.mpeg;*.mpg;*.avi;*.rm;*.pdf;*.doc;*.rtf;*.txt;*.xls;*.csv;',
        'fileExt'           : '*.html;*.py;*.js;*.css;*.jpg;*.jpeg;*.gif;*.png;*.tif;*.tiff;*.mp3;*.mp4;*.wav;*.aiff;*.midi;*.m4p;*.mov;*.wmv;*.mpeg;*.mpg;*.avi;*.rm;*.pdf;*.doc;*.rtf;*.txt;*.xls;*.csv;',
        'sizeLimit'         : 10485760,
        'scriptAccess'      : 'sameDomain',
        'queueSizeLimit'    : 50,
        'simUploadLimit'    : 1,
        'width'             : 300,
        'height'            : 30,
        'hideButton'        : false,
        'wmode'             : 'transparent',
        translations        : {
                              browseButton: 'BROWSE',
                              error: 'An Error occured',
                              completed: 'Completed',
                              replaceFile: 'Do you want to replace the file',
                              unitKb: 'KB',
                              unitMb: 'MB'
        }
    });
    $('input:submit').click(function(){
        $('#id_file').uploadifyUpload();
        return false;
    });
});

我检查了其他值(文件名)是否正确传递,但 session_key 没有。

这是来自 django-filebrowser 的装饰器代码,你可以看到它检查 request.POST.get('session_key'),问题是request.POST是空的。

def flash_login_required(function):
    """
    Decorator to recognize a user  by its session.
    Used for Flash-Uploading.
    """

    def decorator(request, *args, **kwargs):
        try:
            engine = __import__(settings.SESSION_ENGINE, {}, {}, [''])
        except:
            import django.contrib.sessions.backends.db
            engine = django.contrib.sessions.backends.db
        print request.POST
        session_data = engine.SessionStore(request.POST.get('session_key'))
        user_id = session_data['_auth_user_id']
        # will return 404 if the session ID does not resolve to a valid user
        request.user = get_object_or_404(User, pk=user_id)
        return function(request, *args, **kwargs)
    return decorator

【问题讨论】:

    标签: uploadify


    【解决方案1】:

    我找到了一个不使用scriptData 的解决方案。您可以通过 URL 传递数据:

    $("#image_upload1").uploadify({
                'method':'POST',
                'buttonText':'Select',
                'fileTypeDesc' : 'Image Files',
                'fileTypeExts' : '*.gif; *.jpg; *.png',
                'swf':'<?php echo base_url()?>resources/flash/uploadify.swf',
                'uploader':'<?php echo site_url('item/update_item_images/'.$picid[0]); ?>',
                'width': 40,
                'multi':false,
                'onUploadComplete':function(file)
                {
                    $('.original').hide();
                    $('#image1').attr('style','background-image:url("../resources/uploads/<?php echo $id;?>/'+file.name+'");background-size: 140px 119px;');
                    $('#hidden_img_value1').attr('value',file.name)
                }
            });
    

    在这里,我在上传器中传递值$picid[0]。您可以在控制器中访问这些数据。

    【讨论】:

    • 巧妙。使用 uploadify 时 scriptData 总是很痛苦,但这完全可以解决整个愚蠢的问题。希望 Ronniesan 能解决这个问题或写一些文档。
    【解决方案2】:

    @Jimbo 去掉引号 (') 后,控制器中的值也没有接收到。

    $("#image_upload1").uploadify({
                'method':'POST',
                'buttonText':'Select',
                'fileTypeDesc' : 'Image Files',
                'fileTypeExts' : '*.gif; *.jpg; *.png',
                'swf':'<?php echo base_url()?>resources/flash/uploadify.swf',
                'uploader':'<?php echo site_url('item/update_item_image1')?>',
                'width': 40,
                'multi':false,
                'scriptData':{id:'<?=$picid[0]?>'},
                'onUploadComplete':function(file)
                {
                    //alert(response);
                    $('.original').hide();
                    $('#image1').attr('style','background-image:url("../resources/uploads/18/'+file.name+'")');
                    $('#hidden_img_value1').attr('value',file.name)
                }
            });
    

    【讨论】:

    • 我找到了解决方案。我们可以使用 formdata 例如:- 'formData' : {'someKey':'someValue','someOtherKey' : 1},
    【解决方案3】:

    这可能听起来很傻,但你确定这是 session_key 问题吗?

    我在使用 filebrowser+uploadify 时遇到了身份验证问题,但问题不是 session_key,而是该站点受到 Apache 中设置的 HTTP 摘要身份验证的保护,尽管 session_key 发送正常,但 uploadify 不发送 HTTP 身份验证标头。

    您的网络服务器是否需要任何形式的身份验证?

    【讨论】:

    • 不,它对管理面板使用标准的 django 身份验证(基于 cookie)。
    【解决方案4】:

    过去我在传递脚本数据时遇到过类似的问题。删除键/值对中键周围的反逗号 (') 解决了我的问题

    代替:

    'scriptData'        : {'session_key': 'e1b552afde044bdd188ad51af40cfa8e'}, 
    

    用途:

    'scriptData'        : {session_key: 'e1b552afde044bdd188ad51af40cfa8e'}, 
    

    (有用的上传帖子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-07
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      相关资源
      最近更新 更多