我一直在写一个小应用程序,使人们可以向我上传和下载文件。我已在此应用程序中添加了一个Web服务,以这种方式提供上载/下载功能,但我不太确定我的实现将如何处理大文件。
目前,上传和下载方法的定义如下(使用Apache CXF编写):
boolean uploadFile(@WebParam(name = "username") String username, @WebParam(name = "password") String password, @WebParam(name = "filename") String filename, @WebParam(name = "fileContents") byte[] fileContents) throws UploadException, LoginException; byte[] downloadFile(@WebParam(name = "username") String username, @WebParam(name = "password") String password, @WebParam(name = "filename") String filename) throws DownloadException, LoginException;
因此,该文件将作为字节数组上传和下载。但是,如果我有一个愚蠢的文件大小(例如1GB),那肯定会尝试将所有信息放入内存,并导致我的服务崩溃。
所以我的问题是-是否可以返回某种流?我可以想象这将不会完全独立于OS。尽管我了解Web服务背后的理论,但实际方面仍然是我需要了解的一些信息。
为任何意见加油,李
StephenDenne)的Metro实施可以满足您的要求。在简短解释之后,下面提供了我的答案。
使用HTTP作为消息协议构建的大多数Web Service实现都是REST兼容的,因为它们仅允许简单的收发模式,仅此而已。由于所有各种平台都可以理解这种简单的体系结构(例如,与.NET Web服务通信的Java Web服务),因此可以极大地提高互操作性。
如果要保持此状态,可以提供分块。
boolean uploadFile(String username, String password, String fileName, int currentChunk, int totalChunks, byte[] chunk);
如果您没有以正确的顺序获取块(或者您可以只要求以正确的顺序来获取块),这将需要一些工作量,但是它可能很容易实现。