Веб-сервисы Java, позволяющие передавать большие файлы
Я строю сервер веб-служб Java, который должен масштабироваться и быть высокодоступным. Пользователь может загрузить большой файл (~20M) через сервисы. Мыло является предпочтительным.
Мой вопрос: есть ли такая структура веб-службы, которая поддерживает потоковую передачу больших файлов? Любые строительные блоки, которые я должен рассмотреть? Есть хорошие практики?
Любые мысли будут оценены. Благодарю.
1 ответ
Если вам нужна высокая производительность, веб-сервисы не очень хороши.
Вы можете попробовать (Streaming SOAP Attachments):
- http://docs.oracle.com/cd/E12840_01/wls/docs103/webserv_adv/mtom.html
- пример http://www.mkyong.com/webservices/jax-ws/jax-ws-attachment-with-mtom/
File: ImageServer.java // Интерфейс конечной точки сервиса
package com.mkyong.ws;
import java.awt.Image;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
@WebService
@SOAPBinding(style = Style.RPC)
public interface ImageServer{
//download a image from server
@WebMethod Image downloadImage(String name);
//update image to server
@WebMethod String uploadImage(Image data);
}
//File : ImageServerImpl.java
package com.mkyong.ws;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.jws.WebService;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.soap.MTOM;
//Service Implementation Bean
@MTOM
@WebService(endpointInterface = "com.mkyong.ws.ImageServer")
public class ImageServerImpl implements ImageServer{
@Override
public Image downloadImage(String name) {
try {
File image = new File("c:\\images\\" + name);
return ImageIO.read(image);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
public String uploadImage(Image data) {
if(data!=null){
//store somewhere
return "Upload Successful";
}
throw new WebServiceException("Upload Failed!");
}
}