jersey 是基于Java的一个轻量级RESTful风格的Web Services框架。
jersey原本以为是一个web容器和tomcat一类,看后发现不是,他是webservice的的一个框架(远程调用的框架),jersey来发送图片到另一个服务器,他要做的就是通过java代码来把图片发送到另一个服务器(底层使用webservice);其他能实现发送图片到另一个服务器技术,还有ftp(依赖common-net包),但是我觉得比较复杂,没有jersey方便。我们的图片服务器可以使用nginx。也可以使用tomcat(对于静态资源性能没有nginx高),还要注意的是使用tomcat需要配置tomcat的写功能,默认是关闭的,我们需要在tomcat的web.xml中配置init-param如下代码:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我们使用了jersey上传图片到另一台服务器上,而没有使用ftp,需要依赖jersey-client-1.18.1.jar,jersey-core-1.18.1.jar,commons-io-1.3.2.jar三个包,代码如下:
//上传图片
@RequestMapping(value = "/upload/uploadPic.do")
public void uploadPic(@RequestParam(required = false) MultipartFile pic,HttpServletResponse response){
//扩展名
String ext = FilenameUtils.getExtension(pic.getOriginalFilename());
//图片名称生成策略
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmssSSS");
//图片名称一部分
String format = df.format(new Date());
//随机三位数
Random r = new Random();
// n 1000 0-999 99
for(int i=0 ; i<3 ;i++){
format += r.nextInt(10);
}
//实例化一个Jersey
Client client = new Client();
//保存数据库
String path = "upload/" + format + "." + ext;
//另一台服务器的请求路径是?
String url = Constants.IMAGE_URL + path;
//设置请求路径
WebResource resource = client.resource(url);
//发送开始 POST GET PUT
try {
resource.put(String.class, pic.getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//返回二个路径
//springmvc异步返回json数据(可以使用@responsebody注解),如果没有返回值即void就不能使用注解了,可以使用专门用来拼接字符串JSONObject(底层是map)
JSONObject jo = new JSONObject();
jo.put("url", url);
jo.put("path",path);
ResponseUtils.renderJson(response, jo.toString());
}