在Java中解码Base64百分比编码的图像字符串

时间:2015-10-22 08:15:25

标签: java image swift base64 decode

我必须将图像从IOS上传到Java Web服务器。因此,我的IOS程序将图像编码为Base64图像格式并对其进行编码,以便删除特殊字符char的任何问题,如下所示。

    let imageData = UIImageJPEGRepresentation(myImageView.image!, 0.5)
    let base64String = imageData!.base64EncodedStringWithOptions([])
    let encodeImg = base64String.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()) as String!

然后,编码的图像数据字符串将作为JSON对象发送到Web服务器。

    let params = ["image":[ "content_type": "image/jpeg", "filename":"testing", "file_data": base64String]]

    do {
        let postBody = try NSJSONSerialization.dataWithJSONObject(params, options: NSJSONWritingOptions.init(rawValue: 0))
        request.HTTPBody = postBody

        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
            print("Response: \(response)")})
        task.resume()

    } catch {
        print(error)
    }

现在,Java服务器将base64图像数据字符串解码为图像

InputStream stream = new ByteArrayInputStream(Base64.decode(image.getBytes(), Base64.DEFAULT));

并将流写入image.jpeg文件。当我们尝试打开文件时,我们会错误地 文件格式 错误。

当我尝试打印Base64编码的图像数据字符串时,我发现它如下所示。

%2F9j%2F4AAQSkZJRgABAQAASABIAAD%2F4QBMRXhpZgAATU0AKgAAAAgAAgESAAMAAAABAAEAAIdpAAQAAAABAAAAJgAAAAAAAqACAAQAAAABAAAQwKADAAQAAAABAAALIAAAAAD%2F7QA4UGhvdG9zaG9wIDMuMAA4QklNBAQAAAAAAAA4QklNBCUAAAAAABDUHYzZjwCyBOmACZjs+EJ+%2F+ICQElDQ19QUk9GSUxFAAEBAAACMEFEQkUCEAAAbW50clJHQiBYWVogB9AACAALABMAMwA7YWNzcEFQUEwAAAAAbm9uZQAAAAAAAAAAAAAAAAAAAAAAAPbWAAEAAAAA0y1BREJFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKY3BydAAAAPwAAAAyZGVzYwAAATAAAABrd3RwdAAAAZwAAAAUYmtwdAAAAbAAAAAUclRSQwAAAcQAAAAOZ1RSQwAAAdQAAAAOYlRSQwAAAeQAAAAOclhZWgAAAfQAAAAUZ1hZWgAAAggAAAAUYlhZWgAAAhwAAAAUdGV4dAAAAABDb3B5cmlnaHQgMjAwMCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZAAAAGRlc2MAAAAAAAAAEUFkb2JlIFJHQiAoMTk5OCkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAADzUQABAAAAARbMWFlaIAAAAAAAAAAAAAAAAAAAAABjdXJ2AAAAAAAAAAECMwAAY3VydgAAAAAAAAABAjMAAGN1cnYAAAAAAAAAAQIzAABYWVogAAAAAAAAnBgAAE+lAAAE...

如果我们可以注意到,它在我使用

时包含许多百分比“%”符号
base64String.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet()
在上传之前在swift中

有人可以指导我解码百分比编码的图像字符串。

我在Java中对Base64数据解码进行了link。有了它我们可以解码base64字符串,但如何去编码百分比编码字符串。

我想学习解码百分比编码字符串。请提出您的意见。同时,我尝试上传没有百分比编码的图像,看看我是否可以在Java中成功解码它。

非常感谢提前。

2 个答案:

答案 0 :(得分:1)

我给你的swift的最后一行是URL Encode。 因此,您的服务器必须按顺序:URL解码,Base64解码并放入JPG。

答案 1 :(得分:1)

不要对图像字符串进行百分比编码。您可以直接发送为base64EncodedString。 Java可以轻松解码它。