`

webservices传输文件

阅读更多

 

@XmlRootElement(name = "Customer")
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer implements Serializable {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;
    private String name;
    @XmlMimeType("application/octet-stream")
    private DataHandler myData; 
    
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public DataHandler getMyData() {
		return myData;
	}
	public void setMyPData(DataHandler myData) {
		this.myData = myData;
	}
    
}

 

@javax.xml.ws.soap.MTOM
@WebService(name = "MTOMServerService", portName = "MTOMServer")
public class MTOMServer {
	static Logger logger = LogManager.getLogger(MTOMServer.class.getName());
	private static final int BUFFER_SIZE = 1024*1024*100;
	
	/**
	 * 删除
	 * @param path 文件夹路径
	 * @throws FileNotFoundException
	 */
	@WebResult
	@XmlMimeType("*/*")
	public void delete(@WebParam(name = "path") String path) throws FileNotFoundException {
		
		if (path == null || path.isEmpty()){
			logger.error(path+"文件路径为空!");
			throw new FileNotFoundException("文件路径为空!");
		}
		File downloadFile = new File(path);
		
		if (!downloadFile.exists()){
			logger.error(path+"不存在!");			
			throw new FileNotFoundException(path + "不存在!");
		}
		logger.debug("删除:"+path);
		
		(new PowerDelete()).delete(path);
	}

	/**
	 * 下载文件
	 * @param path 文件夹路径
	 * @throws FileNotFoundException
	 * @return DataHandler 数据句柄
	 */
	@WebResult
	@XmlMimeType("*/*")
	public Customer download(@WebParam(name = "path") String path) throws FileNotFoundException {
		
		if (path == null || path.isEmpty()){
			logger.error(path+"文件路径为空!");			
			throw new FileNotFoundException("文件路径为空!");
		}

		final File downloadFile = new File(path);
		
		if (!downloadFile.exists()){
			logger.error(path+"不存在!");			
			throw new FileNotFoundException(path + "不存在!");
		}

		if (!downloadFile.isFile()){
			logger.error(path+"不是一个标准文件!");			
			throw new FileNotFoundException(path + "不是一个标准文件!");
		}
		
		logger.debug("下载文件:"+path);
		
		DataHandler dataHandler = new DataHandler(new FileDataSource(downloadFile));
		
		Customer customer = new Customer();
		
		customer.setName(downloadFile.getName());
		customer.setMyPData(dataHandler);
		
		return customer;
	}

	/**
	 * 
	 * 下载全部文件
	 * @param path 文件夹路径
	 * @throws FileNotFoundException
	 * @return DataHandler[] 数据句柄
	 */
	@WebResult
	@XmlMimeType("*/*")
	public Customer[] downloadMulti(@WebParam(name = "path") String path) throws FileNotFoundException {
		
		if (path == null || path.length() <= 0) {
			logger.error(path+"文件路径为空!");	
			throw new FileNotFoundException("文件夹路径为空!");
		}
		
		File file = new File(path);
		if (!file.exists()){
			logger.error(path+"不存在!");
			throw new FileNotFoundException(path + "不存在!");
		}
		if (file.isFile()){
			logger.error(path+"是一个标准文件,请更换下载方法!");	
			throw new FileNotFoundException(path + "是一个标准文件,请更换下载方法!");
		}
		
		logger.debug("下载文件夹:"+path);
		
		final File[] files = file.listFiles();
		Customer[] handlers = new Customer[files.length];

		for (int i = 0, j = files.length; i < j; i++) {
			final String fileName = files[i].getName();
			Customer customer = new Customer();
			DataHandler dataHandler = new DataHandler(new FileDataSource(files[i]));
			customer.setName(fileName);
			customer.setMyPData(dataHandler);
			handlers[i] = customer;
		}
		
		return handlers;
	}
	
	/**
	 * 上载
	 * 
	 * @param fileName 待上载的文件名
	 * @param dataHandler 数据句柄
	 * @throws IOException IO异常
	 */
	public String upload(@WebParam(name = "fileName") String fileName, @XmlMimeType("*/*") @WebParam(name = "dataHandler") DataHandler dataHandler){
		logger.debug("上传文件:"+fileName);
		
		File depository = ConfigManager.getFileDepository();
		String urlString = depository.getAbsolutePath() + File.separatorChar + fileName;
		InputStream in = null;
		OutputStream out = null;
		try {
			if (fileName == null || fileName.isEmpty()){
				logger.error("文件名为空!");
				throw new FileNotFoundException("文件名为空!");
			}
			
			in = dataHandler.getInputStream();
			out = new FileOutputStream(urlString);
			
			byte[] buf = new byte[BUFFER_SIZE];
			int read;
			while ((read = in.read(buf)) != -1) {
				out.write(buf, 0, read);
				out.flush();
			}
		} catch (IOException e) {
			logger.error(e.getMessage());
			e.printStackTrace();
		} finally {
			try {
				in.close();
				out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
		return urlString;
	}
}

 

		// 下载全部文件
		try {
			List<Customer> dataHandlers = mtomPort.downloadMulti("W:\\TEST\\20140117-144703-4DCD");

			byte[] buf = new byte[CHUNK_SIZE];
			for (int i = 0, j = dataHandlers.size(); i < j; i++) {
				Customer handler = dataHandlers.get(i);
				String fileName = handler.getName();
				fileName = fileName == null || fileName.isEmpty() ? Integer.toString(i) : fileName;
				InputStream in = handler.getMyData().getInputStream();
				OutputStream out = new FileOutputStream("G:\\"+fileName);

				int read;
				while ((read = in.read(buf)) != -1) {
					out.write(buf, 0, read);
					out.flush();
				}
				in.close();
				out.close();
			}
		} catch (FileNotFoundException_Exception e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

 

 

分享到:
评论

相关推荐

    基于web services 的3G手机应用开发(英语学习通)

    一、EnglishServer中包含了web services服务 二、把composition_Data.MDF文件导入SQL Server2000数据库中的方法: 打开SQL Server2000的企业管理器:“数据库”右击中选择任务的“还原数据库”,写一个你要还原...

    C# webservice大文件传输实例源码

    下载后会有2个文件一个 UpFile模拟上传客户端, WebServer模拟服务器接收端。 环境是VS2010.

    使用.NET Web Services将文件保存到数据库

    第一个版本的文件传输模块没有将文件分割成小块,整个文件传送。当用户传送大文件时可能会产生问题。我决定添加ProgressBar显示文件传送进度,这是第二个问题,如何解决呢?我想到了一个好的解决方法,将文件分成...

    MTOM Web Services 2008

    VS 2008工程 http://www.codeproject.com/KB/XML/MTOMWebServices.aspx

    MTOM Web Services 2005

    VS 2005工程 http://www.codeproject.com/KB/XML/MTOMWebServices.aspx

    使用Java搭建Webservices应用程序结构.doc

    什么是WebServices? 它是一种构建应用程序的普遍模型,可以在任何支持网络通信的操作系统中实施运行;它是一种新的web应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。Web Service...

    Silverlight文件上传源码

    webservices是比较慢的,上传文件被分成文件块上传到webservice,然后一块块将文件上传到服务器。如果某块文件不可用可能会造成上传的文件不完整。 .可以上传比较大的文件,开发者有能力限制文件大小和文件总大小,...

    SCC项目ERP营销对接方案.xlsx

    B:Web Services + XML 通过AMBR集成Web Services传输XML数据文件 C:SFTP + XML + 中间表 + 转换程序 通过转换程序(需开发)转换XML数据文件到中间表,或者将中间表数据转换成XML数据文件,并通过AMBR集成FTP...

    PowerTCP Web Tool – 支持网络通信与传输的专业控件

    该工具可以用来自动提交web forms、读取web页面内容、在web服务器上放置文件或从web服务器读取文件、安排/检索web页面内容、生成站点树状结构,或者用于需要与web服务器通信的其它应用程序。 用户可以通过HTTP和...

    JAX-WS的lib、src和docs

    在%JDK_HOME%/bin下有两个命令wsgen和wsimport,就是用到APT和Compiler API来处理碰到的Annotations,wsgen可以为Web Services Provider产生并编译必要的帮助类和相关支持文件,wsimport以WSDL作为输入为Web Service ...

    wsdl文件结构分析

    WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application,他将Web服务描述定义为一组服务访问点,客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服务进行访问(类似远程...

    aws-s3-backup:该应用程序允许您将AWS(Amazon Web Services)S3用作桌面环境的备份系统。 :rocket:

    该应用程序允许您将AWS(Amazon Web Services)S3用作桌面环境的备份系统。 像Dropbox或Google Drive应用一样,您可以在AWS S3上备份重要数据。 此桌面应用程序允许您配置3种不同类型的备份作业(一次,重复,实时)...

    ASP.NET和AJAX简洁教程

    自然而然,Web Service在数据传输和客户端/服务器之间的一般通信方面可以扮演一个重要角色。本文就演示了如果通过ASP.NET AJAX调用ASP.NET web services。 软件需求 本文所有的范例都是使用ASP.NET AJAX RC版,...

    mft-upload:一种用于将文件上传到SOAP WebService的REST实用程序。 它是可配置的,并且可以与Oracle托管文件传输(MFT)一起使用

    用例该软件包公开了一个REST接口,可以上传到MFT SOAP WebServices或任意HTTP表单应用程序。 该实用程序可与Oracle Managed File Transfer服务器配合使用,并使用有效负载模板,因此可以轻松扩展到其他用例。 实施的...

    file-uploads-aws-react-node:react节点和express js项目可将文件上传到亚马逊Web服务(AWS)

    在AWS Bucket上上传文件 描述 :clipboard: 在AWS(Amazon Web Services)存储桶上上传单个和多个文件的演示应用程序 *******请加注星标,以支持我 :folded_hands: ****** 请跟我来 :folded_hands: 在和github上 ...

    aws-lambda-deploy:使用单个命令即可轻松部署Amazon Web Services Lambda函数。 少配置。 最新的Node.js v12!

    最初几次手动单击按钮以上传zip文件是可以的,但很快就会变旧。 有一个更简单的方法! 什么? :thought_balloon: 无需采用构建工具/系统即可简化部署AWS Lambda Function的过程。 如何? :check_mark_button: 有5...

    vocx组件.rar

    此控件用来传输文件,收到及发出的文件会列在文件列表中,双击即可打开文件,而在传输过程中会显示传输进程,并可及时取消。 支持断点续传。 8. BT下载支持(文件共享系统使用) 引入电驴的 BT 下载模块,但会隐藏...

    stream-to-s3:使用node.js将(大)文件图像_视频流传输到Amazon S3

    Node.js是用于将大文件流式传输到Amazon Web Services S3的理想工具。 用例 推出自己的云备份服务 从移动应用或网站上传文件/照片 使用S3作为后端的Drop Box Clone 用法 从NPM安装: npm install stream-to-s3 --...

    WebService.cs

    /// 实例化WebServices /// /// &lt;param name="url"&gt;WebServices地址 /// 调用的方法 /// 把webservices里需要的参数按顺序放到这个object[]里 public static object InvokeWebService(string url, string ...

Global site tag (gtag.js) - Google Analytics