<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • 如何使用Web Service傳輸文件

    時間:2024-10-31 21:56:02 J2EE培訓 我要投稿
    • 相關推薦

    如何使用Web Service傳輸文件

      server對外只開放80端口,并且還需要提供文件上傳和下載功能的應用,下面yjbys小編為大家準備了關于如何使用Web Service傳輸文件的文章,歡迎閱讀。

      1. 首先是一個封裝了服務器端文件路徑,客戶端文件路徑和要傳輸的字節數組的MyFile類。

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      public class MyFile {

      private String clientFile;

      private String serverFile;

      private long position;

      private byte[] bytes;

      public String getClientFile() {

      return clientFile;

      }

      public void setClientFile(String clientFile) {

      this.clientFile = clientFile;

      }

      public String getServerFile() {

      return serverFile;

      }

      public void setServerFile(String serverFile) {

      this.serverFile = serverFile;

      }

      public long getPosition() {

      return position;

      }

      public void setPosition(long position) {

      this.position = position;

      }

      public byte[] getBytes() {

      return bytes;

      }

      public void setBytes(byte[] bytes) {

      this.bytes = bytes;

      }

      }

      2. 文件傳輸的Web Service接口

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      import javax.jws.WebMethod;

      import javax.jws.WebService;

      @WebService

      public interface FileTransferService {

      @WebMethod

      void uploadFile(MyFile myFile) throws FileTransferException;

      @WebMethod

      MyFile downloadFile(MyFile myFile) throws FileTransferException;

      }

      3. 文件傳輸的Web Service接口實現類,主要是一些流的操作

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      import java.io.File;

      import java.io.FileInputStream;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.OutputStream;

      import java.util.Arrays;

      import org.apache.commons.io.FileUtils;

      import org.apache.commons.io.IOUtils;

      public class FileTransferServiceImpl implements FileTransferService {

      public void uploadFile(MyFile myFile) throws FileTransferException {

      OutputStream os = null;

      try {

      if (myFile.getPosition() != 0) {

      os = FileUtils.openOutputStream(new File(myFile.getServerFile()), true);

      } else {

      os = FileUtils.openOutputStream(new File(myFile.getServerFile()), false);

      }

      os.write(myFile.getBytes());

      } catch(IOException e) {

      throw new FileTransferException(e.getMessage(), e);

      } finally {

      IOUtils.closeQuietly(os);

      }

      }

      public MyFile downloadFile(MyFile myFile) throws FileTransferException {

      InputStream is = null;

      try {

      is = new FileInputStream(myFile.getServerFile());

      is.skip(myFile.getPosition());

      byte[] bytes = new byte[1024 * 1024];

      int size = is.read(bytes);

      if (size > 0) {

      byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size);

      myFile.setBytes(fixedBytes);

      } else {

      myFile.setBytes(new byte[0]);

      }

      } catch(IOException e) {

      throw new FileTransferException(e.getMessage(), e);

      } finally {

      IOUtils.closeQuietly(is);

      }

      return myFile;

      }

      }

      4. 一個簡單的文件傳輸異常類

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      public class FileTransferException extends Exception {

      private static final long serialVersionUID = 1L;

      public FileTransferException() {

      super();

      }

      public FileTransferException(String message, Throwable cause) {

      super(message, cause);

      }

      public FileTransferException(String message) {

      super(message);

      }

      public FileTransferException(Throwable cause) {

      super(cause);

      }

      }

      5. 下面是Server類用來發布web service

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      import javax.xml.ws.Endpoint;

      public class FileTransferServer {

      public static void main(String[] args) throws Exception {

      Endpoint.publish("http://localhost:9000/ws/jaxws/fileTransferService", new FileTransferServiceImpl());

      }

      }

      6. 最后是Client類,用來發送文件上傳和下載請求。

      package com.googlecode.garbagecan.cxfstudy.filetransfer;

      import java.io.File;

      import java.io.FileInputStream;

      import java.io.IOException;

      import java.io.InputStream;

      import java.io.OutputStream;

      import java.util.Arrays;

      import org.apache.commons.io.FileUtils;

      import org.apache.commons.io.IOUtils;

      import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

      public class FileTransferClient {

      private static final String address = "http://localhost:9000/ws/jaxws/fileTransferService";

      private static final String clientFile = "/home/fkong/temp/client/test.zip";

      private static final String serverFile = "/home/fkong/temp/server/test.zip";

      public static void main(String[] args) throws Exception {

      long start = System.currentTimeMillis();

      // uploadFile();

      // downloadFile();

      long stop = System.currentTimeMillis();

      System.out.println("Time: " + (stop - start));

      }

      private static void uploadFile() throws FileTransferException {

      InputStream is = null;

      try {

      MyFile myFile = new MyFile();

      is = new FileInputStream(clientFile);

      byte[] bytes = new byte[1024 * 1024];

      while (true) {

      int size = is.read(bytes);

      if (size <= 0) {

      break;

      }

      byte[] fixedBytes = Arrays.copyOfRange(bytes, 0, size);

      myFile.setClientFile(clientFile);

      myFile.setServerFile(serverFile);

      myFile.setBytes(fixedBytes);

      uploadFile(myFile);

      myFile.setPosition(myFile.getPosition() + fixedBytes.length);

      }

      } catch(IOException e) {

      throw new FileTransferException(e.getMessage(), e);

      } finally {

      IOUtils.closeQuietly(is);

      }

      }

      private static void uploadFile(MyFile myFile) throws FileTransferException {

      JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

      factoryBean.setAddress(address);

      factoryBean.setServiceClass(FileTransferService.class);

      Object obj = factoryBean.create();

      FileTransferService service = (FileTransferService) obj;

      service.uploadFile(myFile);

      }

      private static void downloadFile() throws FileTransferException {

      MyFile myFile = new MyFile();

      myFile.setServerFile(serverFile);

      long position = 0;

      while (true) {

      myFile.setPosition(position);

      myFile = downloadFile(myFile);

      if (myFile.getBytes().length <= 0) {

      break;

      }

      OutputStream os = null;

      try {

      if (position != 0) {

      os = FileUtils.openOutputStream(new File(clientFile), true);

      } else {

      os = FileUtils.openOutputStream(new File(clientFile), false);

      }

      os.write(myFile.getBytes());

      } catch(IOException e) {

      throw new FileTransferException(e.getMessage(), e);

      } finally {

      IOUtils.closeQuietly(os);

      }

      position += myFile.getBytes().length;

      }

      }

      private static MyFile downloadFile(MyFile myFile) throws FileTransferException {

      JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

      factoryBean.setAddress(address);

      factoryBean.setServiceClass(FileTransferService.class);

      Object obj = factoryBean.create();

      FileTransferService service = (FileTransferService) obj;

      return service.downloadFile(myFile);

      }

      }

      首先需要準備一個大一點的文件,然后修改代碼中的clientFile和serverFile路徑,然后分別打開uploadFile和downloadFile注釋,運行程序,檢查目標文件查看結果。

      這個程序還是比較簡單的,但基本生完成了文件上傳下載功能,如果需要,也可以對這個程序再做點修改使其支持斷點續傳。

    【如何使用Web Service傳輸文件】相關文章:

    Web Service的開發與應用基礎07-12

    如何使用qq秒傳文件08-09

    電腦文件怎么傳輸到iPad07-30

    如何面試Web前端開發10-10

    iTunes文件共享功能怎么使用09-19

    TTF字體文件如何安裝11-03

    Excel文件如何設置密碼08-25

    學習如何打開php文件10-10

    如何由淺入深實踐學習 Web 標準10-10

    使用XQEngine來搜索XML文件內容07-07

    主站蜘蛛池模板: 久久91精品综合国产首页| 亚洲欧美国产∧v精品综合网| 久久久久久国产精品免费免费| 日韩精品真人荷官无码| 国产成人无码精品久久久免费| 国内精品久久久久影院一蜜桃| 欧美久久亚洲精品| 91亚洲精品自在在线观看| 精品人妻久久久久久888| 免费人妻精品一区二区三区| 国产精品亚洲精品观看不卡| 午夜精品久久久久久久| 久久精品?ⅴ无码中文字幕| 免费精品一区二区三区第35| 国产乱人伦偷精品视频免下载| 亚洲精品久久久www| 久久国产乱子伦精品免费午夜| 国产99精品一区二区三区免费| 国内精品免费在线观看| 国产精品综合色区在线观看| 热re99久久6国产精品免费| 最新精品露脸国产在线| 国产亚洲精品无码拍拍拍色欲| 中文精品久久久久国产网址 | 精品99又大又爽又硬少妇毛片| 亚洲嫩草影院久久精品| 久久精品国产一区| 久久精品国产99国产精偷| 精品亚洲欧美高清不卡高清| 国产在线精品一区二区不卡| 精品乱人伦一区二区三区| 国产亚洲美女精品久久久久狼| 97精品伊人久久大香线蕉app| 97精品人妻系列无码人妻| 99精品免费视品| 精品999在线| 99热精品毛片全部国产无缓冲| 国产精品久久久久久一区二区三区| 精品人妻久久久久久888| 青青草精品视频| 国产成人精品视频在放|