2012-10-31 47 views
1

我正在編寫將圖像和一些元數據一起上載到期望使用base64編碼的圖像執行POST操作的服務的功能。但是,圖像數據在發佈到服務器時似乎會變形,並且不會生成有效的圖像。我選擇使用URLRequest框架而不是HTTPService,因爲服務返回用戶想要保存的內聯下載。使用URLRequest發送Base64編碼數據

在這個URLRequest調用中有什麼地方我不正確地處理編碼?

public function imageExportHandler():void 
    { 
     trace(this); 
     var request:URLRequest = new URLRequest(); 
     request.method = URLRequestMethod.POST; 
     request.url = imageExportServiceUrl; 

     var params:Object = { 
      image: encodeImageBase64(imageData), 
      name: StringUtil.substitute("map-{xmin},{ymin}-{xmax},ymax}", imageExtent), 
      format: Model.instance.imageExportModel.selectedFormat 
     }; 
     request.data = new URLVariables(StringUtil.substitute("image={image}&format={format}&name={name}", params)); 
     navigateToURL(request, "_blank"); 
    } 

    private function encodeImageBase64(toEncode:BitmapData):String 
    { 
     var pngEncoder:PNGEncoder = new PNGEncoder(); 
     var data:ByteArray = pngEncoder.encode(toEncode); 
     var base64Encoder:Base64Encoder = new Base64Encoder(); 
     base64Encoder.encodeBytes(data); 
     return base64Encoder.flush(); 
    } 
+1

您正在使用的Base64編碼器是否將其編碼爲可通過網絡傳輸的安全字符串?如果字符包含在Base64字符串中,則字符+,=和/會導致問題。 – Ren

+0

@人可能就是這樣。編碼器可以與HTTPService庫一起可靠地工作,但這可能會在幕後處理URL編碼問題。 –

+1

我假設您在您的問題中提到的服務不受您的控制。他們是否有任何文件能夠指引您朝着正確的方向發展?也許他們提到了你應該改變這些符號的字符?通常它是''+'='%2B','/'='%2F'和'='='%3D' – Ren

回答

0

事實證明,base64Encoder.flush()沒有正確終止編碼字符串 - 使用正確的函數是base64Encoder.toString()。

相關問題