如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
2017-09-06 14:56
786 查看
会返回下载提示的代码如下:
@RequestMapping("/importCar") @ResponseBody public ActionResult importCardInfoFromExcel(MultipartFile multExcel) throws IllegalStateException, IOException { ActionResult result = new ActionResult(); try{ //第一次判断是否正在导入的目的是:调用导入接口的时候尚有导入操作正在进行,所以直接拒接请求 if(importing) { result.setSuccess(false); result.setMessage("正在导入数据,请勿重复点击!!!"); return result;//不再进行后续操作 } synchronized (lock) { /*第二次判断是否正在导入的目的是:之前没有任何导入操作正在进行,突然爆发多个请求 导入数据的操作, 这些并发的请求穿透了第一次判断。并在加锁的作用下串行操作,但是却没有一种机制拒绝 除了第一个导入请求之外的多余导入操作。 */ if (importing) { //如果正在导入,什么也不做 result.setSuccess(false); result.setMessage("正在导入数据,请勿重复点击!!!"); return result;//不再进行后续操作 } File excel = new File(FileUploadUtils.getUploadFileTempPath() + File.separator + SysCodeUtil.generateByUUID()); multExcel.transferTo(excel); importing = true; //表示正在导入车辆 result = carInfoService.importCarInfo(excel, findCurrentUserId()); return result; } }catch (Exception e) { result.setSuccess(false); result.setMessage("导入数据失败"); Log.logInfo("调用导入车辆信息接口抛出异常: "); Log.logException(e); return result; } // 放置在finally块中保证一定会被恢复原值 importing = false; Log.logInfo("恢复导入操作标志位, importing: " + importing); }
修复后的代码如下:
@RequestMapping("/importCar") @ResponseBody public void importCardInfoFromExcel(MultipartFile multExcel) throws IllegalStateException, IOException { ActionResult result = new ActionResult(); try{ //第一次判断是否正在导入的目的是:调用导入接口的时候尚有导入操作正在进行,所以直接拒接请求 if(importing) { result.setSuccess(false); result.setMessage("正在导入数据,请勿重复点击!!!"); write(result); return;//不再进行后续操作 } synchronized (lock) { /*第二次判断是否正在导入的目的是:之前没有任何导入操作正在进行,突然爆发多个请求 导入数据的操作, 这些并发的请求穿透了第一次判断。并在加锁的作用下串行操作,但是却没有一种机制拒绝 除了第一个导入请求之外的多余导入操作。 */ if (importing) { //如果正在导入,什么也不做 result.setSuccess(false); result.setMessage("正在导入数据,请勿重复点击!!!"); write(result); return;//不再进行后续操作 } File excel = new File(FileUploadUtils.getUploadFileTempPath() + File.separator + SysCodeUtil.generateByUUID()); multExcel.transferTo(excel); importing = true; //表示正在导入车辆 result = carInfoService.importCarInfo(excel, findCurrentUserId()); write(result); } }catch (Exception e) { Log.logInfo("调用导入车辆信息接口抛出异常: "); Log.logException(e); result.setSuccess(false); result.setMessage("导入数据失败!"); write(result); } // 放置在finally块中保证一定会被恢复原值 importing = false; Log.logInfo("恢复导入操作标志位, importing: " + importing); } private void write(ActionResult result) { if (result == null) { return; } PrintWriter writer = null; try { HttpServletResponse response = getServletResponse(); response.setContentType("text/html; charset=utf-8"); writer = response.getWriter(); writer.write(JsonUtils.object2Json(result)); writer.flush(); } catch (Exception e) { Log.logInfo("数据写入响应流失败: "); Log.logException(e); } finally { if (writer != null) { try { writer.close(); } catch (Exception e) { Log.logInfo("响应流关闭失败!:"); Log.logException(e); } } } }
相关文章推荐
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 上传文件返回的json数据会被提示下载问题解决方案
- 上传文件返回的json数据会被提示下载问题解决方案
- 解决IE浏览器下上传文件返回Json数据提示下载的问题。
- Jquery form.js文件上传返回JSON数据,在IE下提示下载文件的解决办法,并对返回数据进行正确的解析
- 解决IE下返回json数据提示文件保存到问题
- 处理文件上传后返回json数据在IE出现文件下载问题
- 解决在IE中返回JSON格式的数据时提示下载的问题
- 解决IE下返回json数据提示文件保存到问题
- 解决springmvc返回json数据IE出现文件下载和json数据中文乱码问题
- form+iframe上传文件返回json在IE下提示下载的问题(源于ueditor的错误)(从ITEYE搬家过来的)
- 前端文件上传,struts2后台返回json数据,在IE为什么会以文件下载的形式打开。
- jquery的ajaxForm在IE上传文件后返回json显示"文件下载"问题
- 下载文件名字乱码问题,json_encode解决Ajax 返回字符串数据不显示问题
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- 解决 spring mvc 返回 json 时 在 ie 下提示下载问题
- .NET easyui form提交后,返回json数据在IE下弹出下载的问题解决方法
- 返回JSON数据,在IE下提示下载文件
- 解决ie下ajaxsubmit上传文件提示下载文件问题
- 如何解决IE会自动下载返回的JSON数据