搭建一个Tomcat,作为图片服务器,异步上传图片

1.图片服务器Tomcat的设置  tomcat/conf/web.xml中内容更改,将tomcat设置为可以读写

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

2.前台页面提供上传图片的表单和ajax异步的逻辑

<form id="jvForm" action="add.do" method="post" enctype="multipart/form-data">
……
    <img src="" id="allImgUrl"/>
    <input type="hidden" name="imgUrl" id="imgUrl"/>
    <input type="file" name="uploadPic" onchange="uploadPic()"/>
</form>
<script type="text/javascript" scr="/res/common/js/jquery.form.js"></script>
<script type="text/javascript">
    //采用jquery.form.js异步上传图片,并结合<form>表单
    function uploadFic(){
        var options = {
            //请求路径
            url = "/upload/uploadPic.do",
            dataType = "json",
            type = "post",
            beforeSubmit : function(formData,jqForm,options){
                //判断是否为图片
                var f = jqForm[0];//将jqForm转成DOM对象
                var v = f.logoPic.value;//获取DOM对象中name为logoPic的值
                //获取扩展名,并转成小写
                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){
               //处理结果
                //将相对路径设置给隐藏域中,提交时用
                $("#imgUrl").val(data.path);
                //将全路径设置给img标签,显示图片用
                $("#allImgUrl).attr("src",data.url);
           }
       }
     
           $("#jvForm").ajaxSubmit(options);
      }
</script>

3.springmvc-back.xml配置图片转换器

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

4.UploadController上传图片到另一台服务器

需要的jar包如下

commons-io-1.3.2.jar

jersey-client-1.18.1.jar

jersey-core-1.18.1.jar

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 cn.itcast.core.web.Constants;
import cn.itcast.core.web.ResponseUtils;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

@Controller
public class UploadController {

	@RequestMapping(value="/upload/uploadPic.do")
	public void uploadPic(@RequestParam(required=false)MultipartFile pic,HttpServletResponse response){
		//@RequestParam(required=false)MultipartFile pic 接收前台表单name=pic文件,required=false表示文件可以为空
		//response 表示springmvc处理异步上传的返回值
	//设置图片到指定的服务器
		//文件扩展名
		String ext = FilenameUtils.getExtension(pic.getOriginalFilename());
		//图片名称=日期+随机数+图片原始名
		String format = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
		Random r = new Random();
		for(int i=0;i<3;i++){
			format+=r.nextInt(10);
		}
	//Jersey工具包发图片到指定服务器
		//实例化Jersey
		Client client = new Client();
		//保存数据库的path
		String path = "/upload/"+format+"."+ext;
		//图片在图片服务器上的请求地址
		String url = Constants.IMAGE_URL+path;

		//jersey设置请求路径
		WebResource resource = client.resource(url);
		//jersey写数据
		try {
			resource.put(String.class,pic.getBytes());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		//ajax回调函数接收的数据
		JSONObject jo = new JSONObject();
		jo.put("url", url);
		jo.put("path", path);
		ResponseUtils.renderJson(response, jo.toString());

	}
	

5.ajax回调数据格式

/**
 * 异步放回数据格式处理
 * @author pengya
 *
 */
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);
	}

}
时间: 2024-09-29 22:45:31

搭建一个Tomcat,作为图片服务器,异步上传图片的相关文章

使用 Nodejs 搭建一个简单的Web服务器

使用Nodejs搭建Web服务器是学习Node.js比较全面的入门教程,因为要完成一个简单的Web服务器,你需要学习Nodejs中几个比较重要的模块,比如:http协议模块.文件系统.url解析模块.路径解析模块.以及301重定向问题,下面我们就简单讲一下如何来搭建一个简单的Web服务器. 作为一个Web服务器应具备以下几个功能: 1.能显示以.html/.htm结尾的Web页面 2.能直接打开以.js/.css/.json/.text结尾的文件内容 3.显示图片资源 4.自动下载以.apk/.

搭建一个简单的DHCP服务器

实验环境: 系统:RHEL6.4 一.给DHCP服务器配置固定IP [[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 HWADDR=....... TYPE=Ethernet UUID=...... ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.50.253 NETMASK=255.255.255.0 [[em

在阿里云上搭建一个简单的node服务器

一.阿里云服务器以及node环境的搭建 服务器可以去阿里云官网购买一个ECS云服务器,价格还是有点小贵的,如果想使用免费的阿里云服务器,那么阿里云官网每天也是有抢免费的服务器的,每天上午十点,新人能抢到为期半年的服务器. 然后有了服务器以后,首先搭建一个node的运行环境,保证node 能正常使用,这个不是本文的内容就不多加赘述了. 如果没有搭建的小伙伴可以参考这里. 二.远程服务器上的代码管理 在阿里云服务器上可以安装一个 git 版本控制器,将自己的代码放置在自己的 GitHub 上,然后在

nodejs基础 用http模块 搭建一个简单的web服务器 响应纯文本

首先说一下,我们平时在浏览器上访问网页,所看到的内容,其实是web服务器传过来的,比如我们访问www.baidu.com.当我们在浏览器地址栏输入之后,浏览器会发送请求到web服务器,然后web服务器根据请求所携带的信息,返回内容. 那么,nodejs中的http模块,就是用来搭建web服务器用的. 下面来简单的搭建一个服务器: var http = require("http"); //request:是请求参数,携带这请求所带来的信息.response:是响应参数,携带者将要返回到

一个大型网站图片服务器架构的演进

本文将以一个真实垂直门户网站的发展历程,向大家娓娓道来. 构建在Windows平台之上的网站,往往会被业内众多技术认为很"保守",甚至会有点.很大部分原因,是由于微软技术体系的封闭和部分技术人员的短视造成的(当然,主要还是人的问题).由于长期缺乏开源支持,所以很多人只能"闭门造车",这样很容易形成思维局限性和短板.以图片服务器为例子,如果前期没有容量规划和可扩展的设计,那么随着图片文件的不断增多和访问量的上升,由于在性能.容错/容灾.扩展性等方面的设计不足,后续将会

python -m http.server 搭建一个简易web下载服务器

在打vulnhub靶场的时候遇到的一个问题 目录 一.进到需要发送的安装包目录 二.开启http服务 三.访问服务器 一.进到需要发送的安装包目录 比如设置一个专门发送,传输的文件的文件夹,cmd命令打开即可以 二.开启http服务 python2 python -m SimpleHTTPServer 9000 python3 python -m http.server 9000 (这里要注意了,python2跟python3的命令是不一样的,我之前就是上网搜搭建方法,大都是搜到了python3

nodejs初探 搭建一个类似 apache 的服务器

#针对于项目而言我们需要明白的是 * 项目大多数的文件都是属于静态文件,只有数据部分存在动态请求.* 数据部分的请求都呈现为RESTful的特性.* 所以项目主要包含两个部分就是静态服务器和RESTful服务器.###section one :创建一个静态服务器 1.创建一个以 app.js 为入口的文件 app.js <pre>var PORT = 8000;var http = require('http');var server = http.createServer(function

使用James搭建一个自己的邮箱服务器

---第一天开发--- 下载Apache James 3.0邮箱服务器,解压到响应的目录 可以看到目录结构: H:\code\JavaCode\James\apache-james-3.0-beta4 λ dir 驱动器 H 中的卷没有标签. 卷的序列号是 04AC-0E80 H:\code\JavaCode\James\apache-james-3.0-beta4 的目录 2016/09/05 00:26 <DIR> . 2016/09/05 00:26 <DIR> .. 201

使用kubernetes单机版搭建一个tomcat小网页

一.实验环境 虚拟机vmware:Centos7ip:192.168.213.101内存:1G硬盘:16G 二.kubernetes单机版环境搭建 1.关闭CentOS自带的防火墙 systemctl disable firewalld systemctl stop firewalld 2.安装etcd和Kubernetes软件(会自动安装Docker软件) yum install -y etcd kubernetes 3.修改配置文件 修改/etc/sysconfig/docker,修改为: