【问题标题】:Sending Base64 encoded data with URLRequest使用 URLRequest 发送 Base64 编码数据
【发布时间】:2012-10-31 15:41:54
【问题描述】:

我正在编写将图像与一些元数据一起上传到服务的功能,该服务期望使用以 base64 编码的图像进行 POST 操作。但是,图像数据在发布到服务器时似乎会被破坏,并且不会产生有效的图像。我选择使用 URLRequest 框架而不是 HTTPService,因为该服务会返回用户想要保存的内联下载。

此 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();
    }

【问题讨论】:

  • 您使用的 Base64 编码器是否将其编码为可安全通过网络传输的字符串?如果字符 +、= 和 / 包含在 Base64 字符串中,则会导致问题。
  • @Ren 可能就是这样。编码器可以可靠地与 HTTPService 库一起工作,但这可能会在幕后处理 url 编码问题。
  • 我假设您在问题中提到的服务不受您的控制。他们是否有任何文件可以为您指明正确的方向?也许他们提到您应该将这些符号更改为哪些字符?通常是'+' = '%2B', '/' = '%2F' and '=' = '%3D'

标签: apache-flex base64


【解决方案1】:

事实证明,base64Encoder.flush() 没有正确终止编码字符串 - 要使用的正确函数是 base64Encoder.toString()。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-29
    • 2015-09-21
    • 2016-12-31
    • 2018-07-04
    相关资源
    最近更新 更多