axis2的上传下载

背景:

  今天一个朋友问我webservice的上传下载怎么实现,我就自己找了一些文章看了看看。然后进行一个总结。

开发环境:

   MyEclipse6.5

   Tomcat6.0

   Axis2-1.4.1

 

 

 下面就详细介绍怎么开发的

  首先新建一个服务类

 

  /** * FileTransferServer.java * 版权所有(C) 2011 [email protected] * 创建:崔冉 Jan 4, 2011 10:06:11 AM */ package sample; import java.io.File; import java.io.FileOutputStream; import java.util.Iterator; import javax.activation.DataHandler; import javax.activation.FileDataSource; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.OMText; import org.apache.axis2.AxisFault; /** * @author 崔冉 * @version 1.0.0 * @desc */ public class FileTransferServer { public static final String TMP_PATH="C://temp//"; public OMElement upload(OMElement element) throws Exception { OMElement _fileContent = null;//文件内容 OMElement _fileName = null;//文件名 OMElement _fileType = null;//文件类型 System.out.println("调用上传.."); System.out.println("The element for upload: " + element); for (Iterator _iterator = element.getChildElements(); _iterator .hasNext();) { OMElement _ele = (OMElement) _iterator.next(); if (_ele.getLocalName().equalsIgnoreCase("fileContent")) { _fileContent = _ele; } if (_ele.getLocalName().equalsIgnoreCase("fileName")) { _fileName = _ele; } if (_ele.getLocalName().equalsIgnoreCase("fileType")) { _fileType = _ele; } } if (_fileContent == null || _fileType == null) { throw new AxisFault("Either Image or FileName is null"); } OMText binaryNode = (OMText) _fileContent.getFirstOMChild(); String fileName = _fileName.getText(); String fileType = _fileType.getText(); String storeDir = TMP_PATH + "//" + "velmaUpload"; File dir = new File(storeDir); if (!dir.exists()) { dir.mkdir(); } String filePath = storeDir + "/" + fileName + "." + fileType; File uploadFile = new File(filePath); if (uploadFile.exists()) { filePath = storeDir + "/" + fileName + "(1)" + "." + fileType; uploadFile = new File(filePath); } // Extracting the data and saving DataHandler actualDH; actualDH = (DataHandler) binaryNode.getDataHandler(); FileOutputStream imageOutStream = new FileOutputStream(uploadFile); actualDH.writeTo(imageOutStream); OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace ns = fac.createOMNamespace("http://example.org/filedata", "fd"); OMElement ele = fac.createOMElement("response", ns); ele.setText("true"); return ele; } public OMElement download(OMElement element) throws Exception { System.out.println("The element for download: " + element); OMElement _userName = null; OMElement _fileName = null; OMElement _fileType = null; for (Iterator _iterator = element.getChildElements(); _iterator .hasNext();) { OMElement _ele = (OMElement) _iterator.next(); if (_ele.getLocalName().equalsIgnoreCase("userName")) { _userName = _ele; } if (_ele.getLocalName().equalsIgnoreCase("fileName")) { _fileName = _ele; } if (_ele.getLocalName().equalsIgnoreCase("fileType")) { _fileType = _ele; } } String userName = _userName.getText(); String fileName = _fileName.getText(); String fileType = _fileType.getText(); String filePath = TMP_PATH + "/" + userName + "/" + fileName + "." + fileType; System.out.println("The filePath for download: " + filePath); FileDataSource dataSource = new FileDataSource(filePath); DataHandler expectedDH = new DataHandler(dataSource); OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace ns = fac.createOMNamespace("http://example.org/filedata", "fd"); OMText textData = fac.createOMText(expectedDH, true); OMElement ele = fac.createOMElement("response", ns); ele.addChild(textData); return ele; } }

 

 

然后通过jar cvf FileTransferServer.aar

打包成aar文件

  最后upload到axis2工程下面的services目录下面。

 

再写个测试类

/** * FileTransferClient.java * 版权所有(C) 2011 [email protected] * 创建:崔冉 Jan 4, 2011 10:09:47 AM */ package sample; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import javax.activation.DataHandler; import javax.activation.FileDataSource; import org.apache.axiom.attachments.utils.IOUtils; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMFactory; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.OMText; import org.apache.axiom.soap.SOAP11Constants; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.client.ServiceClient; /** * @author 崔冉 * @version 1.0.0 * @desc */ public class FileTransferClient { static String IP="127.0.0.1:8080"; static String targetEndpoint="http://"+IP+"/axis2/services/FileTransferServer"; //"http://192.168.1.58:8888/axis2/services/FileOperation" private static EndpointReference targetEPR = new EndpointReference(targetEndpoint); public static boolean upload(String fileName, File file, String fileType) { try { OMElement data = buildUploadEnvelope(fileName, file, fileType); Options options = buildOptions(); ServiceClient sender = new ServiceClient(); sender.setOptions(options); System.out.println("The data in method upload: "+data); OMElement ome = sender.sendReceive(data); System.out.println("Convert the data to element in method upload: "+ome); String b = ome.getText(); System.out.println(b); //return Boolean.parseBoolean(b); return true; } catch(Exception e) { e.printStackTrace(); } return false; } public static boolean download(String userName, String fileName, String fileType) { try { OMElement data = buildDownloadEnvelope(userName, fileName, fileType); Options options = buildOptions(); ServiceClient sender = new ServiceClient(); sender.setOptions(options); System.out.println("The data in method download: "+data); OMElement ome = sender.sendReceive(data); System.out.println("Convert the data to element in method download: "+ome); OMText binaryNode = (OMText) ome.getFirstOMChild(); binaryNode.setOptimize(true); //必须加此句,否则会出现ContentID is null的异常! DataHandler actualDH = (DataHandler) binaryNode.getDataHandler(); FileOutputStream imageOutStream = new FileOutputStream("C://temp//steal.xml"); InputStream is = actualDH.getInputStream(); imageOutStream.write(IOUtils.getStreamAsByteArray(is)); return true; } catch(Exception e) { e.printStackTrace(); } return false; } private static OMElement buildUploadEnvelope(String fileName, File file, String fileType) { DataHandler expectedDH; OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd"); OMElement data = fac.createOMElement("upload", omNs); OMElement fileContent = fac.createOMElement("fileContent", omNs); FileDataSource dataSource = new FileDataSource(file); expectedDH = new DataHandler(dataSource); OMText textData = fac.createOMText(expectedDH, true); fileContent.addChild(textData); OMElement _fileName = fac.createOMElement("fileName", omNs); _fileName.setText(fileName); OMElement _fileType = fac.createOMElement("fileType", omNs); _fileType.setText(fileType); data.addChild(_fileName); data.addChild(_fileType); data.addChild(fileContent); return data; } private static OMElement buildDownloadEnvelope(String userName, String fileName, String fileType) { OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://example.org/filedata", "fd"); OMElement data = fac.createOMElement("download", omNs); OMElement _userName = fac.createOMElement("userName", omNs); _userName.setText(userName); OMElement _fileName = fac.createOMElement("fileName", omNs); _fileName.setText(fileName); OMElement _fileType=fac.createOMElement("fileType", omNs); _fileType.setText(fileType); data.addChild(_userName); data.addChild(_fileName); data.addChild(_fileType); return data; } private static Options buildOptions() throws AxisFault { Options options = new Options(); options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); options.setTo(targetEPR); // enabling MTOM in the client side options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE); options.setTransportInProtocol(Constants.TRANSPORT_HTTP); return options; } public static void main(String agrs[]) { // 上传 //文件具体路径 String file = "E:/1.txt"; String fn = "1"; //文件名称 String ft="txt"; //文件类型 boolean rtv = upload(fn,new File(file),ft); System.out.println("is upload success: "+rtv); //下载 // boolean rtv = download("return","steal","xml"); // System.out.println("is download success: "+rtv); } }

 

最后运行结果如图

axis2的上传下载_第1张图片

 

 

导出的aar文件可以去

 http://dl.dbank.com/c07y2i4k1j 下载。

如有疑问请直接留言。欢迎大家阅读我的文章,谢谢!

你可能感兴趣的:(exception,String,File,upload,iterator,download)