1、修改Tomcat的web.xml文件,支持文件的上传
<servlet>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
2、修改项目的编码格式和Tomcat的编码格式统一。防止出现文件名称的中文乱码问题
1.项目的编码格式
2.Tomcat的编码格式
3、建立FileStore的Web项目,在里面建立upload文件夹,用于存放上传的文件
4、建立FileUploader的Web项目,通过Hession发布文件上传的服务
4.1 上传文件的接口
public interface FileUploadServiceI {
public UploadResult upload(String filename, InputStream data);
}
4.2 上传文件的实现类,利用jersey上传图片到服务器
public class FileUploadServiceImpl implements FileUploadServiceI {
public UploadResult upload(String filename, InputStream data) {
UploadResult uploadResult = null;
Client client = null;
WebResource wr = null;
ByteArrayOutputStream bos = null;
try {
// 创建Client对象 注意是 jersey 中的 Client com.sun.jersey.api.client.Client;
client = Client.create();
// 服务器地址
// 如果服务器地址有多个,可以使用简单的轮询算法,实现图片存放的负载
String url = "http://192.168.2.100:8080/FileStore/";
String path = "upload/" + filename;
String filePath = url + path;
wr = client.resource(filePath);
// 要传输的数据流
byte[] buffer = new byte[1024];
int len = 0;
bos = new ByteArrayOutputStream();
while ((len = data.read(buffer)) != -1) {
bos.write(buffer, 0, len);
}
bos.flush();
// 输入流 读图片到内存中
byte[] readFileToByteArray = bos.toByteArray();
// 向服务器发送文件
wr.put(readFileToByteArray);
// 返回图片的存放信息
// 1.url 图片服务器的地址
// 2.path 图片的存放路径
uploadResult = new UploadResult(url, path);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("文件上传成功");
return uploadResult;
}
}
4.3 用于记录图片地址的JavaBean
//因为要进行网络传输,所以要进行序列化
public class UploadResult implements Serializable {
private static final long serialVersionUID = 4681292538876502348L;
private String url;
private String path;
public UploadResult() {
}
public UploadResult(String url, String path) {
this.url = url;
this.path = path;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
@Override
public String toString() {
return "UploadResult [url=" + url + ", path=" + path + "]";
}
}
4.4 修改web.xml文件利用Hession发布服务
<?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>
4.5 测试hession发布的服务
5、建立FileUploaderTest的客户端程序
5.1 客户端的代码结构如下(需要用到服务端的两个Java类)
5.2 客户端的测试代码
public class FileUploaderClient {
// Hessian服务的url
private static final String url = "http://192.168.2.100: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);
// 要上传的文件的路径
String filePath = "E:/文件上传.pdf";
// 读取需要上传的文件
InputStream data = new BufferedInputStream(
new FileInputStream(filePath));
// 获取文件的名称
String fileName = FilenameUtils.getName(filePath);
// 调用远程服务上传文件。
UploadResult uploadResult = uploader.upload(fileName, data);
// 图片的存放地址为
System.out.println("文件的存放地址为:" + uploadResult.toString());
// 在实现开发里面,将图片存放的信息
// 以json的信息返回给客户端,实现图片的显示
}
6、代码下载