【发布时间】:2015-12-16 17:50:49
【问题描述】:
我正在尝试寻找在 JAXWS 网络服务中传输文件的最佳方式。 MTOM 或 byte[] 是我找到的选项。谁能告诉我哪个是最好的方法以及为什么
【问题讨论】:
我正在尝试寻找在 JAXWS 网络服务中传输文件的最佳方式。 MTOM 或 byte[] 是我找到的选项。谁能告诉我哪个是最好的方法以及为什么
【问题讨论】:
没有通用的最佳文件传输方式。这取决于您的需求。
您应该将其称为 Base64 编码而不是 byte[](文件以使用 Base64 编码的文本形式发送,您将在 java 代码中将其作为 byte[] 处理)。这种方法速度很快,因为它只需要将数据编码为Base64文本并将其写入soap消息,但编码后的数据比原始文件大小大33%。
所以这个方法只推荐用于small文件。
这是更大文件的推荐方法,因为它不会增加文件大小,因为它不会将文件作为编码数据而是作为 MIME 附件发送。这种方法涉及的步骤不仅仅是对数据进行编码,因此需要更多的处理时间,尽管差异可能不会那么大。
大多数 Web 服务框架允许您指定一个阈值,该阈值指示使用 MTOM 所需的最小文件大小。如果文件未达到该大小,则数据将作为 Base64 编码文本发送。
JAX-WS 中的示例:
@WebService
@MTOM(threshold = 3072)
public class MyWebService {
}
这意味着如果文件小于 3 Mb,它将作为 Base64 文本发送,如果文件更大,它将使用 MTOM 发送。这是一种非常常见的方法,它可能会满足您的需求。
文件的大小取决于您的硬件、使用服务的并发客户端等。
【讨论】: