使用flex和django上传图像

时间:2009-11-21 15:23:50

标签: django flex upload

任何人都知道如何在上传图片中组合flex和django? 我在Flex中使用了fileRefenrece,但我不知道如何将它与Django中的View相关联。

谢谢!

[编辑] 我正在使用flex和django创建一个人们登录某些数据的网站,比如迷你实习生orkut。在服务器端,我在客户端构建我的视图,模型等,我在flex,函数和事件等设计中,使用具有特定URL和视图的HTTPService调用django。 所以我点击一个按钮,例如,调用一个HttpService myHttpService.send(),给我的视图提供必要的参数,并从服务器获取一个返回的xml_response并在屏幕上显示它。 但我想允许记录的人更改他们的onw个人资料照片(今天在服务器上的文件夹中,他们必须通过电子邮件向我发送照片,并在他们想要更改时手动更改= /)。 我试过使用FileReference并调用django view / url,但我不知道该怎么做。我在互联网上找不到任何相关内容,所以如果有人知道如何使用django和flex上传照片/文件,那么无论如何,都会有很大的帮助!

谢谢,抱歉我的英语不好。

例如注销(id和名称是葡萄牙语):

我的观点(main.py):

@xml_view
def login(request, xml_resposta, xml_erros):
    params = request.POST or request.GET
    nome_usuario = params.get('usuario')
    senha = params.get('senha')
    sessao = Sessao.cria_autenticado(nome_usuario, senha)
    xml_resposta.addChild(xml.sessao_id(sessao.get_id()))
    return xml_resposta

url.py:

url(r'^logout/$', 'main.logout'),

我在flex上的httpservice:

<mx:HTTPService id="logoutRequest" url="/logout/" resultFormat="e4x" method="POST">
    <mx:request xmlns="">
        <sessao{parentApplication.getIdSessao()}/sessao>
    </mx:request>

</mx:HTTPService>

当我点击Logout按钮时,我会调用logoutRequest.send()

1 个答案:

答案 0 :(得分:1)

Flex FileReference对象将文件发布到任何URL,使其看起来像普通表单中的帖子 - 因此您可以使用Django的普通文件上传功能来处理来自Flex的上传。以下在许多方面都是天真的,但说明了基本的管道:

软硬度:

private var fileRef:FileReference;

private function uploadFile():void
{
    fileRef = new FileReference();
    fileRef.browse();
    fileRef.addEventListener(Event.SELECT, postFile);
    fileRef.addEventListener(ProgressEvent.PROGRESS, uploadProgress);
    fileRef.addEventListener(Event.COMPLETE, uploadComplete);
    fileRef.addEventListener(IOErrorEvent.IO_ERROR, ioError);
}

private function postFile(event:Event):void
{

    var req:URLRequest = new URLRequest('http://yourserver/yourapp/upload');
    fileRef.upload(req, 'from_flex'); // 'from_flex' is the key you use to refer to the file in django's request.FILES dict
}

private function uploadProgress(event:ProgressEvent):void
{
    trace('progress');
}

private function uploadComplete(event:Event):void
{
    trace('done');
}

private function ioError(event:IOErrorEvent):void
{
    trace('error: '+event.toString());
}

在Django中,您只需要一个接收文件并执行任何操作的视图:

def receive_file(request):
    received_file = request.FILES['from_flex']
    destination = open('recieved_file.jpg', 'wb+')
    # naively save the file to disk in this case:
    file_data = received_file.read()
    destination.write(file_data)
    destination.close()
    return HttpResponse()

您还需要在urls.py文件中添加一个条目,以通过一些网址公开上述视图。有关处理上传文件的更多信息,请参阅django文档: