当前位置: 首页 > news >正文

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

转载于:https://www.cnblogs.com/liaoweipeng/p/5754502.html

相关文章:

  • Lisp永远成不了编程主流语言
  • 【leetcode #84 #85】Maximal Rectangle
  • MAC系统下,删除.svn文件
  • NOIP2000进制转换
  • 264. Ugly Number II
  • 黑盒测试用例设计——错误猜测法
  • 初学Java:我为什么来学Java?
  • hdoj5835【水题】
  • Android ScrollView+ViewPager+PullToRefreshListView
  • CF #367 DIV2 E
  • dl标签和table标签
  • sql 分割字符串 存储过程
  • GUI之绘画控制
  • jmc远程监控java服务
  • 制作根文件系统的经验
  • Bootstrap JS插件Alert源码分析
  • canvas 五子棋游戏
  • Java到底能干嘛?
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • JS学习笔记——闭包
  • linux学习笔记
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Redash本地开发环境搭建
  • SQLServer之索引简介
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 对JS继承的一点思考
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 计算机在识别图像时“看到”了什么?
  • 日剧·日综资源集合(建议收藏)
  • 十年未变!安全,谁之责?(下)
  • 使用 Docker 部署 Spring Boot项目
  • 数据科学 第 3 章 11 字符串处理
  • 物联网链路协议
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #NOIP 2014#Day.2 T3 解方程
  • #图像处理
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $.proxy和$.extend
  • (11)MSP430F5529 定时器B
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2020)Java后端开发----(面试题和笔试题)
  • (4)Elastix图像配准:3D图像
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)ObjectiveC 深浅拷贝学习
  • (转载)(官方)UE4--图像编程----着色器开发
  • (状压dp)uva 10817 Headmaster's Headache
  • ./和../以及/和~之间的区别
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .naturalWidth 和naturalHeight属性,
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验