使用Jersey构建图片服务器

前台页面代码

<form id="jvForm" action="add.do" method="post" enctype="multipart/form-data">
<table>
<tr>
<td width="20%" class="pn-flabel pn-flabel-h"></td>
<td width="80%" class="pn-fcontent">
<img width="100" height="100" id="allImgUrl" />
<input type="hidden" name="imgUrl" id="path" />
<input type="file" onchange="uploadPic()" name="pic" id="logoPic"/>
</td>
</tr>
</table>
</form>

前台JS代码

<script type="text/javascript">
//上传图片
function uploadPic() {
//定义参数
var options = {
url : "/upload/uploadPic.do",
dataType : "json",
type : "post",
beforeSubmit : function(formData,jqForm,options){
// 判断是否为图片
// 将jqForm转成DOM对象
var f = jqForm[0];
// 获取DOM对象中name为logoPic的值
var v = f.logoPic.value;
// 获取扩展名,并转成小写
var ext = v.substring(v.length-3).toLowerCase();
// 比对扩展名 jpg gif bmp png
if(ext != "jpg" && ext != "gif" && ext != "bmp" && ext != "png"){
alert("只允许上传图片!");
return false;
}
//校验提交的表单
return true;
},
success : function(data) {
// 回显图片内容
$("#allImgUrl").attr("src", data.url);
$("#path").val(data.path);
}
}; // jquery.form使用方式
$("#jvForm").ajaxSubmit(options);
}
</script>

在Spring中配置图片转换器

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB -->
<property name="maxUploadSize" value="1048576"/>
</bean>

创建UploadController以及工具类

package cn.itcast.core.controller.admin;

import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random; import javax.servlet.http.HttpServletResponse; import org.apache.commons.io.FilenameUtils;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource; import cn.itcast.common.web.ResponseUtils;
import cn.itcast.core.web.Constants; @Controller
public class UploadController {
// 上传图片
@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) {
e.printStackTrace();
} // 返回二个路径
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", url);
jsonObject.put("path", path); ResponseUtils.renderJson(response, jsonObject.toString());
}
}
package cn.itcast.core.web; public interface Constants {
/**
* 图片服务器
*/
public static final String IMAGE_URL = "http://localhost:8088/BabasportProject_ImageService/";
}
package cn.itcast.common.web; import java.io.IOException; import javax.servlet.http.HttpServletResponse; public class ResponseUtils {
// 发送内容
public static void render(HttpServletResponse response, String contentType, String text) {
response.setContentType(contentType);
try {
response.getWriter().write(text);
} catch (IOException e) {
e.printStackTrace();
}
} // 发送的是JSON
public static void renderJson(HttpServletResponse response, String text) {
render(response, "application/json;charset=UTF-8", text);
} // 发送xml
public static void renderXml(HttpServletResponse response, String text) {
render(response, "text/xml;charset=UTF-8", text);
} // 发送text
public static void renderText(HttpServletResponse response, String text) {
render(response, "text/plain;charset=UTF-8", text);
}
}

搭建另一个Tomcat,作为图片服务器

图片服务器Tomcat的设置 tomcat/conf/web.xml中内容更改

<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>

修改图片服务器的Tomcat的端口号

在BabasprotProject_ImageService项目的webapp目录下创建upload文件夹

使用Jersey构建图片服务器的更多相关文章

  1. 170522、Linux 平台通过 nginx 和 vsftpd 构建图片服务器

    Nginx WEB 服务器 Nginx 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第 ...

  2. 使用Jersey实现图片服务器与应用服务器分离

         现在模拟一下Jersey从客户端发送图片到服务器.   1.Tomcat准备 (1)解压一个新的Tomcat作为图片服务器,然后修改端口号(有3处).                (2)然 ...

  3. 5分钟Serverless实践:构建无服务器的图片分类系统

    前言 在过去“5分钟Serverless实践”系列文章中,我们介绍了如何构建无服务器API和Web应用,从本质上来说,它们都属于基于APIG触发器对外提供一个无服务器API的场景.现在本文将介绍一种新 ...

  4. 5分钟Serverless实践 | 构建无服务器图片鉴黄Web应用

    Serverless是什么 Serverless中文译为“无服务器”,最早可以追溯到2012年Ken Fromm发表的<Why The Future Of Software And Apps I ...

  5. Windows平台网站图片服务器架构的演进[转]

    构建在Windows平台之上的网站,往往会被业内众多架构师认为很“保守”.很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成 的.由于长期缺乏开源支持,所以只能“闭门造车”,这样很容易形成 ...

  6. jersey实现跨服务器上传

    1.导入跨服务器上传文件jar文件 <dependency> <groupId>commons-io</groupId> <artifactId>com ...

  7. Windows下搭建Nginx图片服务器

    在项目最开始,上传图片的时候,服务器先保存原图再使用ImageMagick生成上传图片缩略图,这种方法有很多缺点,例如生成的缩略图的大小是固定的,不能动态请求指定大小的缩略图. 虽然有非常多的图片云存 ...

  8. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...

  9. Windows平台网站图片服务器架构的演进

    在主流的Web站点中,图片往往是不可或缺的页面元素,尤其在大型网站中,几乎都将面临“海量图片资源”的存储.访问等相关技术问题.在针对图片服务器的架构扩展中,也会历经很多曲折甚至是血泪教训(尤其是早期规 ...

随机推荐

  1. Sping学习笔记(一)----Spring源码阅读环境的搭建

    idea搭建spring源码阅读环境 安装gradle Github下载Spring源码 新建学习spring源码的项目 idea搭建spring源码阅读环境 安装gradle 在官网中下载gradl ...

  2. centos使用android studio遇到的一些问题

    1.下载完成后进入bin目录启动 ./studio 2. 由于google被墙,SDK 下载不了, 照此教程添加下载源 http://jingyan.baidu.com/album/adc815137 ...

  3. C#深入学习笔记 - 可空类型与构造函数默认参数

    在实际开发中或许可能会遇到某个属性需要提供一个默认参数,如果该参数是引用类型的话,可以通过 使用 null 来表示未知的值,但如果是int或 其他值类型的话就有点不好办了,因为如果需要一个int或fl ...

  4. Storm入门,看这篇就够了

    部分一:Srorm 简介 1.1 Storm是实时的数据流,Hadoop是批量离线数据 起源背景 Twitter 开源的一个类似于Hadoop的实时数据处理框架 Storm是由Nathan Marz ...

  5. Hive窗口函数最全案例详解

    语法: 分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置) 常用分析函数: 聚合类 avg().sum().max(). ...

  6. linux中将video转换成gif

    我使用的机器是Linux mint 17,因为习惯了在linux中开发而有时候在写小demo的时候要带一些演示,虽然可以使用录屏也可以但是视屏演示这些小demo也不是特别的方便.之前一直在linux中 ...

  7. Java 多线程练习

    题目:某公司组织年会,会议入场时有两个入口,在入场时每位员工都能获取一张双色球彩票,假设公司有100个员工,利用多线程模拟年会入场过程, 并分别统计每个入口入场的人数,以及每个员工拿到的彩票的号码.线 ...

  8. eShopOnContainers学习系列(一):Swagger的使用

    最近在看eShopOnContainer项目,抽取一下其中的基础知识点,做个记录,有兴趣的可以看下. 新建一个.net core API项目,添加Nuget包 Swashbuckle.AspNetCo ...

  9. 使用XAMPP配置Apache服务器反向代理

    反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时 ...

  10. Angular2+之使用FormGroup、FormBuilder和Validators对象控制表单(取值、赋值、校验和是否可编辑等)

    1.要使用Angular自带的表单控制需要先引入相关模块(.ts文件): import { FormGroup, //表单对象类 FormBuilder, //表单生成工具类 Validators} ...