如何使用Java使用Web服务上传多个文件?

时间:2013-01-17 14:01:02

标签: java web-services wsdl

好吧,我在这里搜索了如何使用java上的webservice制作上传文件,但没有任何令人满意的答案。 我需要构建一个方法,我接收一些字符串和一个文件列表。 有人可以给我一个关于如何创建web服务的方向,我可以上传多个文件吗?

@WebMethod()
public String criarPA(String name, List<File> files)

它是这样的......我已经看到我不能使用文件......那么我可以使用什么而不是?

4 个答案:

答案 0 :(得分:3)

您无法使用File,因为WebService中使用的SOAP协议没有此类型。但是你总是可以发送字节数组:

@XmlType
public class SoapFile implements Serializable {

  private String fileName;
  private byte[] fileData;

  public String getFileName() {
     return fileName;
  }

  public void setFileName(String fileName) {
     this.fileName = fileName;
  }

  public byte[] getFileData() {
     return fileData;
  }

  public void setFileData(byte[] fileData) {
     this.fileData = fileData;
  }
}

现在你的代码看起来像这样:

@WebMethod
public String criarPA(List<SoapFile> files)

接下来,您只需使用标准“Java”方式从File中保存的字节数组创建SoapFile


我希望它会有所帮助。

答案 1 :(得分:2)

这是一种方法,你应该发送一个byte []列表。如果你想要文件的名称,你也应该添加该属性。

要注意的是,如果要通过Java中的Web服务传输文件,则应启用MTOM,从而提高性能。 以下是作为无状态EJB实现的WS端点的标头:

@WebService 
@WebContext(contextRoot="FileWS")
@MTOM(enabled=true)
@Stateless
public class FileWS implements IFileWS{

    @WebMethod(operationName = "sendFiles", action = "sendFiles")
    public void sendFiles(@WebParam(name = "name")String name, 
        @WebParam(name = "files")ArrayList<byte[]> files) {

答案 2 :(得分:1)

“文件”在java Web服务中不是受支持的类型。

如果您想了解java Web服务支持的类型,请参阅此页面(3.2.3使用Java Web Services支持的数据类型):http://docs.oracle.com/cd/B15897_01/web.1012/b14027/javaservices.htm

我建议您实现一个只在服务器端上传一个文件的Web服务,然后在客户端,您可以像调用文件一样调用此方法;)

这是一个实现用于上传文件的java Web服务的教程:http://www.ibm.com/developerworks/library/ws-devaxis2part3/section2.html

我希望这有帮助:)。

此致

Aymen

答案 3 :(得分:0)

另一种方式是

您可以使用SAAJ上传图像。

The SAAJ API allows you to do XML messaging from the Java platform:
By simply making method calls using the SAAJ API, you can read and write
SOAP-based XML messages, and you can optionally send and receive such 
messages over the Internet (some implementations may not support sending
and receiving). 

请检查here文件的工作原理。


创建AttachmentPart对象并添加内容:

AttachmentPart attachment = message.createAttachmentPart();

String stringContent = "Update address for Sunny Skies " +
    "Inc., to 10 Upbeat Street, Pleasant Grove, CA 95439";
attachment.setContent(stringContent, "text/plain");
attachment.setContentId("update_address");

message.addAttachmentPart(attachment); 

URL url = new URL("http://greatproducts.com/gizmos/img.jpg");
DataHandler dataHandler = new DataHandler(url);
AttachmentPart attachment = message.createAttachmentPart(dataHandler);
attachment.setContentId("attached_image");

message.addAttachmentPart(attachment);

访问AttachmentPart对象:

java.util.Iterator iterator = message.getAttachments();
while (iterator.hasNext()) {
    AttachmentPart attachment = (AttachmentPart)iterator.next();
    String id = attachment.getContentId();
    String type = attachment.getContentType();
    System.out.print("Attachment " + id + " has content type " + type);
    if (type.equals("text/plain")) {
    Object content = attachment.getContent();
    System.out.println("Attachment contains:\n" + content);
    }
}

为了更清楚地了解此流程,请检查this