WebService实现文件上传下载

一:服务端:一个普通java web工程

package com.wzh.file;

import com.sun.xml.ws.developer.StreamingAttachment;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlMimeType;
import javax.xml.ws.soap.MTOM;

/**
 * @author  y
 * @version V1.0
 * @desc    文件上传下载服务
 */
@StreamingAttachment(parseEagerly = true, memoryThreshold = 40000L)
@MTOM
@WebService(name = "MtomStreaming",
        serviceName = "MtomStreamingService",
        targetNamespace = "http://wzh.com",
        wsdlLocation = "StreamingImplService.wsdl")
public class FileManager {

    /**
     * 文件上传
     * @param fileName
     * @param data
     * @return
     */
    @WebMethod
    public String fileUpload(String fileName,
            @XmlMimeType("application/octet-stream") DataHandler data){
        String result;

        File file = new File(fileName);

        try {
            OutputStream os = new BufferedOutputStream(new FileOutputStream(file));

            data.writeTo(os);

            os.close();

            result = "1";
        } catch (FileNotFoundException ex) {
            result = "0";
            Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            result = "0";
            Logger.getLogger(FileManager.class.getName()).log(Level.SEVERE, null, ex);
        }

        return result;
    }

    /**
     * 文件下载
     * @param filename
     * @return
     */
    @XmlMimeType("application/octet-stream")
    @WebMethod
    public DataHandler fileDownload(String filename) {
        return new DataHandler(new FileDataSource(filename));
    }
}

二:客户端:通过NetBeans建立Web服务客户端,根据Web服务端生成的wsdl进行创建,将服务端wsdl文件保存到本地,通过本地文件方式创建:

本地测试:

(1)新建InputStreamDataSource类继承DataSource

package test;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.activation.DataSource;

public class InputStreamDataSource implements DataSource {
    private final InputStream inputStream;

    public InputStreamDataSource(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    @Override
    public InputStream getInputStream() throws IOException {
        return inputStream;
    }

    @Override
    public OutputStream getOutputStream() throws IOException {
        throw new UnsupportedOperationException("Not implemented");
    }

    @Override
    public String getContentType() {
        return "*/*";
    }

    @Override
    public String getName() {
        return "InputStreamDataSource";
    }
}

(2)Test.java

package test;

import com.wzh.MtomStreaming;
import com.wzh.MtomStreamingService;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.activation.DataHandler;

public class Test {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        downloadFile();
    }

    public static void uploadFile(){
        MtomStreamingService service = new MtomStreamingService();
        MtomStreaming port = service.getMtomStreamingPort();

        InputStream is;

        try {
            is = new FileInputStream("/home/y/my_temp/tt.doc");

            DataHandler upf = new DataHandler(new InputStreamDataSource(is));
            String result = port.fileUpload("/home/y/my_temp2/tt.doc", upf);

            System.out.println("==========upload result:"+result);
            is.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void downloadFile(){
        MtomStreamingService service = new MtomStreamingService();
        MtomStreaming port = service.getMtomStreamingPort();

        DataHandler dhn = port.fileDownload("/home/y/my_temp/22.doc");
        try {
            File tempFile = new File("/home/y/my_temp/w01.doc");

            OutputStream output = new BufferedOutputStream(new FileOutputStream(tempFile));
            dhn.writeTo(output);

            output.close();

            System.out.println("====download");
        } catch (IOException e1) {
            e1.printStackTrace();
        }
    }

}
时间: 2024-08-03 13:01:05

WebService实现文件上传下载的相关文章

webservice文件上传下载

使用DataHandler实现webservice的文件上传下载 服务端代码: package com.hello.weChat.controller; import javax.activation.DataHandler; import javax.activation.FileDataSource; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io

WebService中实现上传下载文件

不多说,直接看代码: /*上传文件的WebService*/ using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Web; using System.Web.Services; using System.IO; /// <summ

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构: 处理上传: FileUploadServlet.java 1 package fnz.fileUploadTest; 2 3 import java.io.File; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.PrintWriter; 7 import java.text.SimpleDateFormat; 8 import java.

使用Paramiko实现SSH登陆,文件上传下载

1,SSh登陆命令行实现: #!/usr/bin/env python # encoding: utf-8 import paramiko private_key_path = '/Users/aolens/.ssh/id_rsa' key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.Aut

文件上传下载—servlet API实现

servlet API实现文件上传下载需要的jar包: UploadServlet.java package com.ymw.web.servlet; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.UUID; import javax.servl

文件上传下载

1.文件上传 文件上传下载本质是通过Socket的字节流来传输数据的.所以,对于文件上传,我们可以从HttpRequest对象获取输入流,进而获取上传文件的内容.但是采用ServletAPI并不能获取获取对应文件的字节流,而是获取整个Socket的字节流,里面包括提交的参数.上传文件内容以及其他附加信息. Servlet API上传文件,代码如下 protected void doPost(HttpServletRequest request, HttpServletResponse respo

Hadoop之HDFS原理及文件上传下载源码分析(下)

上篇Hadoop之HDFS原理及文件上传下载源码分析(上)楼主主要介绍了hdfs原理及FileSystem的初始化源码解析, Client如何与NameNode建立RPC通信.本篇将继续介绍hdfs文件上传.下载源解析. 文件上传 先上文件上传的方法调用过程时序图: 其主要执行过程: FileSystem初始化,Client拿到NameNodeRpcServer代理对象,建立与NameNode的RPC通信(楼主上篇已经介绍过了) 调用FileSystem的create()方法,由于实现类为Dis

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项目地址:http://www.51aspx.com/code/MSDCArtMengFileUpload 咨询qq:286275658 演示程序下载地址:http://pan.baidu.com/s/1geVfmcr 服务器端运行效果图: 服务器端配置文件: <?xml version="1.

开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载

OkHttpPlus介绍 项目地址:https://github.com/ZhaoKaiQiang/OkHttpPlus 主要功能:OkHttp封装,支持GET.POST.UI线程回调.JSON格式解析.链式调用.小文件上传下载及进度监听等功能 为什么要写这么一个库呢? 首先,是因为OkHttp在4.4之后已经作为底层的Http实现了,所以OkHttp这个库很强大,值得我们学习. 其次,在我看来,OkHttp使用起来不如Volley方便,OkHttp的回调都是在工作线程,所以如果在回调里面操作V