Apache flex 如何使用PyAMF或PhpAMF在flex中上传文件?客户端,而服务器端只需要很少的帮助

Apache flex 如何使用PyAMF或PhpAMF在flex中上传文件?客户端,而服务器端只需要很少的帮助,apache-flex,file-upload,bytearray,pyamf,Apache Flex,File Upload,Bytearray,Pyamf,嘿 我需要上传一组图像使用flex与机器人腿 我需要一个进度条工作时,图像上传 它可能同时上载一个或多个图像 我想知道是否上传Bytarray到服务器,然后保存图像是太沉重的服务器 在服务器端,我有一个由pyamf创建的方法,如下所示: 谢谢;) 在captionmash.com上工作时,我不得不解决一个类似的问题(将一张照片从Flex上传到Django),也许它可以帮助你。我使用PyAMF进行正常的消息传递,但FileReference类有一个内置的上载方法,所以我选择了简单的方法 基本上,

  • 我需要上传一组图像使用flex与机器人腿
  • 我需要一个进度条工作时,图像上传
  • 它可能同时上载一个或多个图像
  • 我想知道是否上传Bytarray到服务器,然后保存图像是太沉重的服务器
  • 在服务器端,我有一个由pyamf创建的方法,如下所示:

  • 谢谢;)

    在captionmash.com上工作时,我不得不解决一个类似的问题(将一张照片从Flex上传到Django),也许它可以帮助你。我使用PyAMF进行正常的消息传递,但FileReference类有一个内置的上载方法,所以我选择了简单的方法

    基本上,这个系统允许你们从Flex上传一个文件到GoogleAppEngine,然后使用AppEngine的图像API创建缩略图,并将图像转换成JPEG,然后上传到S3 bucket。库用于AmazonS3连接,您可以在github上查看项目的全部代码

    此代码仅用于单文件上载,但您应该能够通过创建FileReference对象数组并对所有对象调用upload方法来执行多文件上载

    我在这里发布的代码是有点清理,如果你仍然有问题,你应该检查回购了

    客户端(Flex):

    服务器端(应用程序引擎上的Django):

    网址:

    观点:

    def receive_file(request):
        uploadService = UploadService()
        file     = request.FILES['file']
        uploadService.receive_single_file(file)
        return HttpResponse()
    
    上传服务类

    import uuid
    from google.appengine.api import images
    from boto.s3.connection import S3Connection
    from boto.s3.key import Key
    import mimetypes
    import settings
    
    def receive_single_file(self,file):
    
        uuid_name = str(uuid.uuid4())
        content = file.read()
    
        image_jpeg = self.create_jpeg(content)
        self.store_in_s3(uuid_name, image_jpeg)
    
        thumbnail = self.create_thumbnail(content)
        self.store_in_s3('tn_'+uuid_name, thumbnail)
    
    #Convert image to JPEG (also reduce size)
    def create_jpeg(self,content):
        img = images.Image(content)
        img_jpeg = images.resize(content,img.width,img.height,images.JPEG)
        return img_jpeg
    
    #Create thumbnail image using file
    def create_thumbnail(self,content):
        image = images.resize(content,THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT,images.JPEG)
        return image
    
    def store_in_s3(self,filename,content):
        conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY)
        b = conn.get_bucket(BUCKET_NAME)
        mime = mimetypes.guess_type(filename)[0]
        k = Key(b)
        k.key = filename
        k.set_metadata("Content-Type", mime)
        k.set_contents_from_string(content)
        k.set_acl("public-read")  
    

    您必须使用AMF进行上传吗?您当然可以使用它进行上传,但RemoteObject和NetConnection都不会发送任何类型的进度事件,因此您最好使用不确定的进度条。
    urlpatterns = patterns('',
        ...
        (r'^upload/$', receive_file),    
        ...
    
    def receive_file(request):
        uploadService = UploadService()
        file     = request.FILES['file']
        uploadService.receive_single_file(file)
        return HttpResponse()
    
    import uuid
    from google.appengine.api import images
    from boto.s3.connection import S3Connection
    from boto.s3.key import Key
    import mimetypes
    import settings
    
    def receive_single_file(self,file):
    
        uuid_name = str(uuid.uuid4())
        content = file.read()
    
        image_jpeg = self.create_jpeg(content)
        self.store_in_s3(uuid_name, image_jpeg)
    
        thumbnail = self.create_thumbnail(content)
        self.store_in_s3('tn_'+uuid_name, thumbnail)
    
    #Convert image to JPEG (also reduce size)
    def create_jpeg(self,content):
        img = images.Image(content)
        img_jpeg = images.resize(content,img.width,img.height,images.JPEG)
        return img_jpeg
    
    #Create thumbnail image using file
    def create_thumbnail(self,content):
        image = images.resize(content,THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT,images.JPEG)
        return image
    
    def store_in_s3(self,filename,content):
        conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY)
        b = conn.get_bucket(BUCKET_NAME)
        mime = mimetypes.guess_type(filename)[0]
        k = Key(b)
        k.key = filename
        k.set_metadata("Content-Type", mime)
        k.set_contents_from_string(content)
        k.set_acl("public-read")