一直以来上传文件都是使用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上传文件的更多相关文章

  1. ajaxfileupload.js上传文件兼容IE7及以上版本

    要兼容IE789,要修改ajaxfileupload.js;要将此处的代码替换掉 if(window.ActiveXObject) { var io = document.createElement( ...

  2. jquery插件--ajaxfileupload.js上传文件原理分析

    英文注解应该是原作者写的吧~说实话,有些if判断里的东西我也没太弄明白,但是大致思路还是OK的. jQuery.extend({ createUploadIframe: function (id, u ...

  3. 【转】JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错,但是由于手机不支持flash,所以不得不再找一个文件上传插件来用了.后来发现a ...

  4. js上传文件带参数,并且,返回给前台文件路径,解析上传的xml文件,存储到数据库中

    ajaxfileupload.js jQuery.extend({ createUploadIframe: function(id, uri) { //create frame var frameId ...

  5. JQuery插件ajaxFileUpload 异步上传文件(PHP版)

    太久没写博客了,真的是太忙了.善于总结,进步才会更快啊.不多说,直接进入主题. 前几天想在手机端做个异步上传图片的功能,平时用的比较多的JQuery图片上传插件是Uploadify这个插件,效果很不错 ...

  6. js 上传文件后缀名的判断 var flag=false;应用

    js 上传文件后缀名的判断  var flag=false;应用 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional// ...

  7. atitit.javascript js 上传文件的本地预览

    atitit.javascript js 上传文件的本地预览 1. .URL.createObjectURL  1 1.1. 吊销所有使用 URL.createObjectURL 而创建的 URL,以 ...

  8. struts2 jquery ajaxFileUpload 异步上传文件

    网上搜集的,整理一下. 一.ajaxFileUpload 实现异步上传文件利用到了ajaxFileUpload.js这个文件,这是别人开发的一个jquery的插件,可以实现文件的上传并能够和strut ...

  9. jquery ajaxFileUpload异步上传文件

    ajaxFileUpload.js 很多同名的,因为做出来一个很容易. 我用的是这个:https://github.com/carlcarl/AjaxFileUpload 下载地址在这里:http:/ ...

随机推荐

  1. 使用Yeoman快速启动AngularJS项目开发

    本博客停止更新,请访问新个人博客:owenchen.net 前言 博客迁移到了BAE上,http://owenchen.net/,以后的文章会首发在自己的博客上,随后在博客园发布. 很久没有写文章了, ...

  2. knockout源码分析之执行过程

    一.执行流程 二.主要类分析 2.1. 在applyBindings中,创建bindingContext,然后执行applyBindingsToNodeAndDescendantsInternal方法 ...

  3. Matter.js – 你不能错过的 2D 物理引擎

    Matter.js 是一个 JavaScript 2D 刚体物理引擎的网页.Matter.Engine 模块包含用于创建和操作引擎的方法.这个引擎是一个管理更新和渲染世界的模拟控制器. Matter. ...

  4. Spring(3)—— Junit框架单元测试

    Junit主要用于单元测试,即白盒测试.它是一个开源的由JAVA开发的一个用于测试的框架. Junit的几个基本概念:TestCase,TestSuite,TestFixtrue TestCase:代 ...

  5. 给栅格数据添加RasterFunction--自定义渲染方法

    <script type="text/javascript"> /** dojo.require("esri.map"); dojo.require ...

  6. 分分钟学会系列:mac地址泛洪攻击实验

    一.实验目的: 通过实战深入理解mac地址泛洪攻击的原理. 二.实验原理: 交换机中有一张非常重要的表,叫做mac表,这个表是一个硬件组成的表,主要是完成快速转发.mac表有大小限制,不同的交换机的m ...

  7. 如何编写Vault插件扩展Vault Explorer的功能

    今天练习了一下Vault Explorer的扩展程序,基本上是Vault SDK中的HelloWord示例程序.如果你刚刚开始接触Vault的二次开发,希望对你有帮助. 开始之前,你需要安装Vault ...

  8. android https正确调用方案(防中间人劫持)

    以下内容为原创,欢迎转载,转载请注明 来自博客园:http://www.cnblogs.com/joey-hua/p/4971380.html 1.劫持https接口 很多android客户端虽然使用 ...

  9. 【代码笔记】iOS-关于UIFont的一些define

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  10. IOS动画

    基础动画 //创建基础动画    CABasicAnimation * basic = [CABasicAnimation animation];    //动画路径    basic.keyPath ...