`
hwei_344370758
  • 浏览: 20587 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Axis2上传下载文件--2

 
阅读更多
service:

package com.siven.axis2.service;

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;

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;
        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://siven.org", "fileUpload");
        OMElement ele = fac.createOMElement("response", ns);
        ele.setText("true");
        return ele;
    }
public OMElement download(OMElement element) throws Exception
    {
        System.out.println("调用下载..");
//        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;
        String filePath = TMP_PATH + 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://siven.org", "fileDownload");
        OMText textData = fac.createOMText(expectedDH, true);
        OMElement ele = fac.createOMElement("response", ns);
        ele.addChild(textData);
        return ele;

    }

}


========================================================================================================

client:

package com.siven.axis2.client;

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;

public class FileTransferClient
{
    private static EndpointReference targetEPR = new EndpointReference("http://localhost:8888/Axis2/services/FileTransferServer");

    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();
            return Boolean.parseBoolean(b);
        }
        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/3.png");
            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();
        //http://siven.org   fileUpload  与服务端一致
        OMNamespace omNs = fac.createOMNamespace("http://siven.org", "fileUpload");
        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();
        //http://siven.org   fileDownload  与服务端一致
        OMNamespace omNs = fac.createOMNamespace("http://siven.org", "fileDownload");
        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 uploadFile = "c:/1.png";//要上传的文件
        String fileName = "2";//上传至服务器后的文件名
        String fileType = "png";//上传至服务器后的文件后缀
        boolean rtv = upload(fileName, new File(uploadFile), fileType);
        System.out.println("is upload success: " + rtv);
       
        String userName = "siven";
        String downfileName = "2";//要下载的文件名   fileType为要下载的文件后缀
        if (download(userName, downfileName, fileType))
        {
            System.out.println("download success.");
        }
        else
        {
            System.out.println("download fail.");
        }
    }
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics