RESTful Web服务中的字节数组与Base64字符串

时间:2011-01-31 17:18:18

标签: java rest base64

我的REST Web服务必须将图像文件发送到客户端。我在两个选项之间感到困惑:将图像作为字节数组发送,还是应该将其编码为基本64字符串?各自的优点和缺点是什么?我可能不得不使用gzip来压缩图像...它是否会产生任何一种方法的问题?我甚至可能需要将我的方法公开为SOAP服务,在这种情况下我应该选择哪种方法?

谢谢!

2 个答案:

答案 0 :(得分:10)

RESTful界面的精彩之处在于它只是HTTP。所以如果你公开"字节数组"通过REST版本,任何浏览器都可以在您的REST URL上执行HTTP GET并接收并直接呈现您的图像。逐字返回有效负载远比在其上放置编码更加RESTful。通过REST推荐额外的base64编码层并不多。

如果你要返回SOAP,你绝对想要返回一个base64字符串。原始二进制数据与构建SOAP的XML不兼容。您可以尝试通过MTOM来解决它,但是为了与SOAP客户端的通用兼容性,您可能需要内联base64编码的数据。

通常,压缩图像文件没有任何好处。图像格式本身内部涉及压缩,第二次压缩传递不会再节省空间。

答案 1 :(得分:1)

如果您的服务返回JSON或XML(图像+某些信息),那么您应该在base 64中对图像进行编码,因为它们都是基于字符串的,并且您希望传输字节数组。唯一的问题是,你是应该自己制作还是应该制作我使用的框架。

GZip的情况很明显 - 对servlet容器的中继压缩(如tomcat - 你可以配置,是否应该对gzip进行响应)。或者,您可以使用GZipFilter之类的内容。