2、使用hessian上传文件(向外提供文件的上传服务)
2016-10-09 13:41
495 查看
hessian较早版本通过 byte[] 进行文件传输;4.0之后支持 InputStream 作为参数或返回值进行传输。
注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
创建一个FileUploader Web项目作为文件上传的服务端,如下图所示:
FileUploadServiceI接口代码如下:
FileUploadServiceImpl类的代码如下:
看到这样的运行结果就说明Hessian服务器的测试通过。
创建一个普通的java项目作为文件上传客户端,添加对hessian-4.0.37.jar的引用,同时将Hessian服务端的FileUploadServiceI接口打包成jar包提供给文件上传客户端调用,如下图所示:
FileUploaderClient类的代码如下:
运行FileUploaderClient客户端,就可以将文件"Shiro教程.pdf"上传到服务器上的指定存储目录了,如下图所示:
http://www.cnblogs.com/xdp-gacl/p/3898100.html
注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出。可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决。
一、创建Hessian服务端
创建一个FileUploader Web项目作为文件上传的服务端,如下图所示:
1. 1、创建文件上传服务接口FileUploadServiceI
FileUploadServiceI接口代码如下:package file.upload.service; import java.io.InputStream; /** * <p>ClassName: FileUploadServiceI<p> * <p>Description: 文件上传服务接口<p> * @version 1.0 V * @createTime 2014-8-8 上午10:41:27 */ public interface FileUploadServiceI { public void upload(String filename, InputStream data); }
1.2. 实现文件上传服务接口FileUploadServiceI
FileUploadServiceImpl类的代码如下:package file.upload.service.impl; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import file.upload.service.FileUploadServiceI; /** * <p>ClassName: FileUploadServiceImpl<p> * <p>Description: FileUploadServiceI文件上传接口的具体实现类<p> * @version 1.0 V * @createTime 2014-8-8 上午10:42:43 */ public class FileUploadServiceImpl implements FileUploadServiceI { /* (non-Javadoc) * @MethodName upload * @Description 上传文件 * @author xudp * @param filename 上传的文件名 * @param data 上传的文件的输入流 * @see file.upload.service.FileUploadServiceI#upload(java.lang.String, java.io.InputStream) */ public void upload(String filename, InputStream data) { BufferedInputStream bis = null; BufferedOutputStream bos = null; try { //获取客户端传递的InputStream bis = new BufferedInputStream(data); //创建文件输出流 bos = new BufferedOutputStream(new FileOutputStream( "E:/fileUpload/" + filename)); byte[] buffer = new byte[8192]; int r = bis.read(buffer, 0, buffer.length); while (r > 0) { bos.write(buffer, 0, r); r = bis.read(buffer, 0, buffer.length); } System.out.println("-------文件上传成功!-------------"); } catch (IOException e) { throw new RuntimeException(e); } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { throw new RuntimeException(e); } } if (bis != null) { try { bis.close(); } catch (IOException e) { throw new RuntimeException(e); } } } } }
1.3、在web.xml中配置HessianServlet
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>FileUploadService</servlet-name> <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> <init-param> <!-- home-class也可以写为service-class --> <param-name>home-class</param-name> <!-- 服务器对接口的现实,供客户端调用 --> <param-value>file.upload.service.impl.FileUploadServiceImpl</param-value> </init-param> <init-param> <!-- 提供给客户端调用的接口,这里的home-api配置不是必须的,可以不配置 --> <!--home-api也可以写为api-class --> <param-name>home-api</param-name> <!-- 客户端接口 --> <param-value>file.upload.service.FileUploadServiceI</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>FileUploadService</servlet-name> <url-pattern>/FileUploadService</url-pattern> </servlet-mapping> </web-app>到此,服务端的编写就完成了,部署FileUploader到Tomcat服务器,启动Tomcat服务器,在浏览器地址栏输入:http://localhost:8080/FileUploader/FileUploadService,查看是否可以调用。
看到这样的运行结果就说明Hessian服务器的测试通过。
二、创建文件上传客户端
创建一个普通的java项目作为文件上传客户端,添加对hessian-4.0.37.jar的引用,同时将Hessian服务端的FileUploadServiceI接口打包成jar包提供给文件上传客户端调用,如下图所示:
2.1、编写文件上传客户端
FileUploaderClient类的代码如下:package file.uplaod.client; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.InputStream; import com.caucho.hessian.client.HessianProxyFactory; import file.upload.service.FileUploadServiceI; /** * <p>ClassName: FileUploaderClient<p> * <p>Description: 文件上传客户端<p> * @version 1.0 V * @createTime 2014-8-8 上午10:00:13 */ public class FileUploaderClient { //Hessian服务的url private static final String url = "http://gacl:8080/FileUploader/FileUploadService"; public static void main(String[] args) throws Exception { //创建HessianProxyFactory实例 HessianProxyFactory factory = new HessianProxyFactory(); //获得Hessian服务的远程引用 FileUploadServiceI uploader = (FileUploadServiceI) factory.create(FileUploadServiceI.class, url); //读取需要上传的文件 InputStream data = new BufferedInputStream(new FileInputStream("E:/开发资料/电子书/Shiro教程.pdf")); //调用远程服务上传文件。 uploader.upload("Shiro教程.pdf", data); } }
运行FileUploaderClient客户端,就可以将文件"Shiro教程.pdf"上传到服务器上的指定存储目录了,如下图所示:
三、原文博客地址
http://www.cnblogs.com/xdp-gacl/p/3898100.html
相关文章推荐
- 腾讯对象存储服务COS加密签名上传文件与下载文件的剖析,福利提供给所有使用Android的小伙伴们!
- 使用fileupload上传文件,并提供下载
- Django在新浪SAE中使用storage服务实现文件上传保存
- 使用Servlet3.0提供的API实现文件上传
- SSM框架中-使用KindEditor+Nginx服务器+FTP服务,实现多文件上传
- java web端使用smb服务实现上传文件共享
- 使用MFC提供的Http类下载和上传文件
- 使用curl做上传文件处理(结合file服务)
- 关于云服务Bmob的使用方法(下)——上传文件
- Ceph RGW服务 使用s3 java sdk 分片文件上传API 报‘SignatureDoesNotMatch’ 异常的定位及规避方案
- 使用IIS作文件服务,使用C#实现上传删除
- 终于搞定使用node.js +redis 作为服务端,提供图片上传存储服务
- 使用servlet3.0提供的API来进行文件的上传操作
- [转自:My Program life]使用MFC提供的Http类下载和上传文件
- Django在新浪SAE中使用storage服务实现文件上传保存
- 使用IIS作文件服务,使用C#实现上传删除
- Android中使用HTTP服务上传文件
- 使用MFC提供的Http类下载和上传文件(转)
- Hessian学习总结(二)——使用hessian上传文件
- 使用MFC提供的Http类下载和上传文件