我在上传时遇到了scriptData的问题,我非常确定配置语法是好的,但是无论我做什么,scriptData都不会被传递给上传脚本。
我用flash v.Shockwave Flash9.0 r31在FF和Chrome上进行了测试
这是配置:
$(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发布于 2012-06-02 02:14:37
我找到了一个不使用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)
}
});在这里,我在uploader中传递了值$picid[0]。您可以在您的控制器中访问这些数据。
发布于 2012-06-01 16:18:10
@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)
}
});发布于 2009-12-17 20:14:33
这听起来可能很愚蠢,但您确定这是session_key问题吗?
我在filebrowser+uploadify上遇到了身份验证问题,但问题不在session_key,而是在Apache中设置的HTTP digest身份验证集保护了站点,尽管session_key发送得很好,但uploadify不发送HTTP身份验证头。
您的web服务器是否需要任何形式的身份验证?
https://stackoverflow.com/questions/1791200
复制相似问题