使用ajaxfileupload.js上传文件
一直以来上传文件都是使用form表单上传文件,也看到过有人使用js上传文件,不过看起来蛮简单的也就没有怎么去理会。今天突然要使用这种方式上传文件,期间还遇到点问题。因此就记录下来,方便以后遇到这样的问题可以查看。
首先就是引入js和ajaxfileupload的文件,这个不需要多说。
然后就是ajax请求后台地址。代码如下:
<div class="btn-file-box pos-rel">
<input type="file" id="upload" name="upload" style="font-size: 0;opacity: 0;width: 100%;height: 100%;position: absolute;left: 0;top: 0;"/>
<span class="btn ">选择文件</span>
</div>
$("#upload").on("change",function(){
$.ajaxFileUpload({
url : '/test/user/imgUpload',//后台请求地址
type: 'post',//请求方式 当要提交自定义参数时,这个参数要设置成post
secureuri : false,//是否启用安全提交,默认为false。
fileElementId : 'upload',// 需要上传的文件域的ID,即<input type="file">的ID。
dataType : 'json',//服务器返回的数据类型。可以为xml,script,json,html。如果不填写,jQuery会自动判断。如果json返回的带pre,这里修改为json即可解决。
success : function (json, status) {//提交成功后自动执行的处理函数,参数data就是服务器返回的数据。
alert(json.retMsg);
},
error : function (json, status, e) {//提交失败自动执行的处理函数。
}
});
});
前台代码完成就开始开发后台代码了。
package com.roc.test;import java.io.File;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.jboss.resteasy.annotations.providers.jaxb.json.BadgerFish;
import org.springframework.stereotype.Controller;
import net.sf.json.JSONObject;
/**
* 上传文件
* @author liaowp
*
*/
@Controller
@Path("/user")
public class UploadImg { @Path("/imgUpload")
@POST
@Produces("application/json; charset=utf-8")
@Consumes(MediaType.MULTIPART_FORM_DATA )
@BadgerFish
public JSONObject upload(@QueryParam("orderId") String orderId,@Context HttpServletRequest request,@Context HttpServletResponse response) {
JSONObject jsonobj = new JSONObject();
String file_path=request.getSession().getServletContext().getRealPath("/")+File.separator+"corpfile"+File.separator;//文件存储路径
String upload_file_path="";
File file =new File(file_path);
if(!file.exists() && !file.isDirectory()){ //如果文件夹不存在则创建
file.mkdir();
upload_file_path=file_path;
}else{
upload_file_path=file_path;
}
DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置工厂
factory.setRepository(new File(file_path));// 设置文件存储位置
factory.setSizeThreshold(2048 * 1024);// 设置大小,如果文件小于设置大小的话,放入内存中,如果大于的话则放入磁盘中
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");// 这里就是中文文件名处理的代码,其实只有一行
String fileName = "";
List<FileItem> list;
JSONObject jsonobj = new JSONObject();
try {
list = upload.parseRequest(request);
for (FileItem item : list) {
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString("utf-8");
} else {
String name = item.getFieldName();
String value = item.getName();
fileName =name + ".jpg";
if (item.getSize() > 10485760) {//您好,上传文件要小于10M!
jsonobj.put("retCode","100");
jsonobj.put("retMsg","您好,上传文件要小于10M!"):
} else {//上传成功
item.write(new File(upload_file_path, fileName));
System.out.println(File.separator + "corpfile" + File.separator + fileName);
jsonobj.put("retCode","0");
jsonobj.put("retMsg","您好,上传成功!");
}
}
}
} catch (Exception e) {//上传失败
e.printStackTrace();
jsonobj.put("retCode","9999");
jsonobj.put("retMsg","您好,文件上传失败,");
}
return jsonobj;
} }
存在问题:
IE下有的浏览器会存在返回的值变为下载json文件的问题,把dataType修改为text,后台代码的请求类型也修改为text/html; charset=utf-8以及返回的头也是text/html; charset=utf-8
使用ajaxfileupload.js上传文件的更多相关文章
- ajaxfileupload.js上传文件兼容IE7及以上版本
要兼容IE789,要修改ajaxfileupload.js;要将此处的代码替换掉 if(window.ActiveXObject) { var io = document.createElement( ...
- jquery插件--ajaxfileupload.js上传文件原理分析
英文注解应该是原作者写的吧~说实话,有些if判断里的东西我也没太弄明白,但是大致思路还是OK的. jQuery.extend({ createUploadIframe: function (id, u ...
- 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)
前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...
- js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中
ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...
- JQuery插件ajaxFileUpload 异步上传文件(PHP版)
太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错 ...
- js 上传文件后缀名的判断 var flag=false;应用
js 上传文件后缀名的判断 var flag=false;应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...
- atitit.javascript js 上传文件的本地预览
atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL 1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...
- struts2 jquery ajaxFileUpload 异步上传文件
网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...
- jquery ajaxFileUpload异步上传文件
ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...
随机推荐
- jquery.sobox 经典版弹窗控件
sobox 是一款非常实用的,基于 jQuery 的弹窗控件.功能非常完整,而代码量又非常少(压缩完仅8k不到)的一款弹窗控件,如果你熟悉ext的弹窗控件,那么sobox的使用对你来说应该是愉悦而完全 ...
- 为什么URL中的中文需要Encode两次?
在URL中传参的时候常常需要传入中文,这个时候就需要对中文参数进行编码,即URLEncode.但是,常常是Encode两次,而不是一次,为什么呢? 首先要知道,tomcat会自动解码一次: 这样的话, ...
- 苹果浏览器和uc浏览器在移动端的坑(日常积累,随时更新)
先mark 1 . 移动端uc浏览器不兼容css3 calc() 2 . ie8下a标签没有内容给宽高也不能触发点击跳转 3 . safari输入框加上readOnly="ture&qu ...
- java--POI解析excel兼容性问题
近日,使用POI解析excel,发现2003版本的excel解析与2007版本的excel解析存在问题.特此总结: 1.所需jar包 : 2.java类代码(读取excel文件): public vo ...
- Client JQuery invoke NetSuite Suitelet
Please indicate the source if you need to repost. Client jQuery could initialize a cross-domain requ ...
- Day Tips:ForceDeleteSite
最近遇到一个奇怪的问题,如下图: 试了各种删除方式都不行. 谷歌了一下发现需要使用如下代码删除. SPWebApplication w = SPWebApplication.L ...
- 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息
一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...
- IOS NSTimer和CADisplayLink的用法
IOS--NSTimer和CADisplayLink的用法 NSTimer初始化器接受调用方法逻辑之间的间隔作为它的其中一个参数,预设一秒执行30次.CADisplayLink默认每秒运行60次,通过 ...
- MJRefresh下拉刷新框架
github下载地址:https://github.com/CoderMJLee/MJRefresh MJRefresh类结构图 self.userTableView.mj_footer = [MJR ...
- C++语言-07-异常处理和信号处理
异常处理 概述 概念 异常是指在程序运行时发生的特殊情况,C++ 中提供了一套异常处理机制,标准库 提供了异常处理的基础 作用 异常提供了一种转移程序控制权的方式 与异常处理相关的关键字 throw ...