好吧,我在这里搜索了如何使用java上的webservice制作上传文件,但没有任何令人满意的答案。 我需要构建一个方法,我接收一些字符串和一个文件列表。 有人可以给我一个关于如何创建web服务的方向,我可以上传多个文件吗?
@WebMethod()
public String criarPA(String name, List<File> files)
它是这样的......我已经看到我不能使用文件......那么我可以使用什么而不是?
答案 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。