使用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. GS-PON数据库分区列范围查询优化案例

    查询慢的SQL: with p as( select np.nodecode , np.nodename, d.deviceid, d.devicename, d.loopaddress, p.res ...

  2. php 两种获取分类树的方法

    php 两种获取分类树的方法 1. /** * 获取分类树 * @param array $array 数据源 * @param int $pid 父级ID * @param int $level 分 ...

  3. 5分钟了解Prometheus

    Prometheus(译:普罗米修斯)用领先的开源监控解决方案为你的指标和警报提供动力(赋能). 1.  概述 1.1.  Prometheus是什么? Prometheus是一个开源的系统监控和警报 ...

  4. Spark Streaming 入门

    概述 什么是 Spark Streaming? Spark Streaming is an extension of the core Spark API that enables scalable, ...

  5. 基于操作系统的Linux网络参数的配置

    一.实验目的 1.掌握Linux下网络参数的查看方法并理解网络参数的含义. 2.掌握Linux下网络参数的配置 二.实验内容 1.查看当前网络配置的参数. 2.在Linux主机中将网络参数按以下要求设 ...

  6. .NET之Hangfire快速入门和使用

    前言: 定时任务调度问题,是一个老生常谈的问题.网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quar ...

  7. Java中类加载和反射技术实例

    我们知道一个对象在运行时有两种类型,一个是编译类型,一个是运行时类型.在程序运行时,往往是需要发现类和对象的真实的信息的.那么如何获的这种信息呢? 其一,如果我们在编译和运行时都知道类型的具体信息,这 ...

  8. 聚类算法之K-means

    想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时候上述条件得不到满 ...

  9. Linux系列之yum安装

    yum是Linux系统的安装必备神器,简直不要太方便.但是新系统一般是不自带yum工具的,所以需要手动安装一下. 环境:centos7 新建一个目录用来保存yum安装包 mkdir install 进 ...

  10. InnoDB体系结构

    1.前言 整理了下InnoDB体系结构,方便以后更简单的理解 2.思维导图 参考: https://www.cnblogs.com/tangshiguang/p/6741035.html https: ...