图片异步上传,JQuery封装的异步图片(文件)上传,后台框架使用

3 篇文章 0 订阅
1 篇文章 0 订阅

图片异步上传,JQuery封装的异步图片(文件)上传,后台框架使用;

先上html代码和效果图

<!DOCTYPE HTML>
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">

</head>
<body>
	<form action="#(ctx)/test/upload" method="post">
		图片 : <input type="file" name="img" οnchange="ajaxImgUpload(this,'hiddenImgId','showImgId');"/><br />
		<input type="hidden" id="hiddenImgId" name="header"/>
		<div>
			<img id="showImgId" alt="" οnerrοr="setDefault(this,'/testUploadFile/assets/img/loadFailed.png');"
				src="#(ctx)/assets/img/noImage.png" width="300px" height="160px">
		</div>
	</form>
</body>
<script src="https://cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>
<script src="#(ctx)/assets/js/common.js"></script>
</html>






js代码

/**
 * 当图片加载错误时,设置一张默认的图片,免得尴尬^_^
 * @param img 设置的图片暂时是写死的,应该通过参数过来
 */
function setDefault(img,src){img.src=src; }

/**
 * 自己封装的jquery.ajax文件上传方法
 * @param fileInput 文件选择input
 * @param hiddenImgId 图片路径隐藏域,做数据库持久
 * @param showImgId 要展示上传后的图片img标签id
 */
function ajaxImgUpload(fileInput,hiddenImgId,showImgId){
	if(!isExt(fileInput)){
		alert("支持的图片文化上传格式暂只支持jpg,jpeg,png,bmp;请重新选择!");
		return;
	}
	var formData = new FormData();
    formData.append("header", fileInput.files[0]); 
    var url = "commom/file/upload";
    ajaxPost(url, {
    	data : formData,
        contentType: false, //必须false才会自动加上正确的Content-Type
        processData: false, //必须false才会避开jQuery对 formdata 的默认处理 XMLHttpRequest会对 formdata 进行正确的处理
    	success : function(ret){
    		console.log(ret);
    		if(ret.isOk){
    			var path = ret.uploadPath+ret.fileName;
    			document.getElementById(hiddenImgId).value = path;
    			document.getElementById(showImgId).src = "commom/file/download?path="+path;
    		}else{
    			alert(ret.msg);
    		}
    	}
    })
}

/**
 * 判断后缀是否支持图片
 * @param fileName
 */
function isExt(fileInput){
	
	var exts = new Array("jpg","jpeg","png","bmp");
	//"\."做一个转义
	var values = fileInput.value.split("\.");
	//转小写  sn.toLowerCase()  转大写 sn.toUpperCase()
	var ext = values[values.length-1].toLowerCase();
	for(var s in exts){
		if(exts[s] === ext){
			return true;
		}
	}
	return false;
}

/**
 * ajaxPost请求
 * 支持文件上传,下面是注意事项:
 * var formData = new FormData();
 * formData.append("header", fileInput.files[0]); 
 * 必须false才会自动加上正确的Content-Type
 * 必须false才会避开jQuery对 formdata 的默认处理 XMLHttpRequest会对 formdata 进行正确的处理
 * contentType: false, processData: false,
 * @param url
 * @param options
 */
function ajaxPost(url,options){
	var defalutOptions = {
			type : 'POST',
			cache : false,
			data : {},
			dataType : 'json',
			contentType: true,
			processData: true,
			success : function(ret,textStatus,jqXHR){
				if(ret.isOk){
					alert(ret.msg);
				}else{
					alert(ret.msg);
				}
			},
			error : function(ret){
				alert("联系管理员!!!")
			},
			complete : function(XHR, TS){
				//console.log(XHR);
			}
			
	}
	for(var o in options){
		defalutOptions[o] = options[o];
	}
	$.ajax(url,defalutOptions);
}

/**
 * ajaxGet请求(请求数据相关)
 * @param url
 * @param options
 */
function ajaxGet(url,options){
	var defalutOptions = {
			type : 'GET',
			cache : false,
			data : {},
			dataType : 'json',
			success : function(ret,textStatus,jqXHR){
				if(ret.isOk){
					alert(ret.msg);
				}else{
					alert(ret.msg);
				}
			},
			error : function(ret){
				alert("联系管理员!!!")
			},
			complete : function(XHR, TS){
				//console.log(XHR);
			}
			
	}
	for(var o in options){
		defalutOptions[o] = options[o];
	}
	$.ajax(url,defalutOptions);
}



后台代码(JFinal实现)

package demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletOutputStream;

import com.jfinal.aop.Clear;
import com.jfinal.core.ActionKey;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;
import com.jfinal.log.Log;
import com.jfinal.upload.UploadFile;

public class TestController extends Controller{
	
	private Log log = Log.getLog(getClass());
	
	public static final String extName = ".jpg";
	
	@ActionKey("/test")
	public void index(){
		render("index.html");
	}
	
	/**
	 * 文件上传
	 * @date 2017年6月7日
	 * @author ChoxSu
	 */
	@Clear
	@ActionKey("/commom/file/upload")
	public void updload(){
		
		System.out.println("go go go ");
		
		UploadFile file = null;
		try {
			file = getFile("header", getAvatarTempDir(), getAvatarMaxSize(), "UTF-8");	//getFile("img", getAvatarTempDir(), getAvatarMaxSize());
		} catch (Exception e) {
			String errmsg = "Posted content length of * exceeds limit of "+getAvatarMaxSize();
			if(e.getMessage().indexOf("exceeds limit of")>errmsg.length()){
				renderJson(Ret.fail("msg", "文件上传大小限制"+getAvatarMaxSize()));
			}else{
				renderJson(Ret.fail("msg", e.getMessage()));
			}
		}
		if(file == null){
			renderJson(Ret.fail("msg", "请选择图片"));
		}
		renderJson(Ret.ok("status", "SUCCESS").set("fileName", file.getFileName()).set("uploadPath", file.getUploadPath()));
	}
	
	/**
	 * 文件下载
	 * @date 2017年6月7日
	 * @author ChoxSu
	 */
	@Clear
	@ActionKey("/commom/file/download")
	public void download(){
		//JFinal 方式返回下载--推荐使用
		//renderFile(new File(uploadPath"D:\\upload_jyoga\\upload\\avatar\\agrzx4.png"));
		renderFile(new File(getPara("path")));
		//常规方式
		oldType();
	}
	
	@Deprecated
	private void oldType(){
		/*FileInputStream fi = null;
		ServletOutputStream os = null;
		
		byte[] b = new byte[2000];
		try {
			fi = new FileInputStream(new File("D:\\upload_jyoga\\upload\\avatar\\agrzx4.png"));
			os = getResponse().getOutputStream();
			while(fi.read(b)>0){
				os.write(b);
			}
			os.flush();
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}finally{
			try {
				if(os!=null){
					os.close();
				}
				if(fi!=null){
					fi.close();
				}
			} catch (IOException e) {
				log.error(e.getMessage(), e);
			}
		}
		renderNull();*/
	}

	public static String getAvatarTempDir() {
		return "/upload/avatar/temp/";
	}
	
	// 用户上传图像最多只允许5M大小
	public static int getAvatarMaxSize() {
		return 5 * 1024 * 1024;
	}
}


不吝啬^_^点个赞



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值