栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

SpringMVC结合ajaxfileupload实现文件无刷新上传代码

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SpringMVC结合ajaxfileupload实现文件无刷新上传代码

jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传。其实ajaxfileupload文件上传特别的简单。下面就演示一下在SpringMVC中实现ajax的文件上传。

1、后台接收代码

首先在spring的配置文件中添加文件上传配置  



 
 

再写文件接收的代码

package com.chinaunicom.jlmssp.controller;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;

import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.chinaunicom.jlmssp.model.DataResponse;
import com.chinaunicom.jlmssp.model.JavaToJsMsg;
import com.chinaunicom.jlmssp.model.Org_UserInfo;
import com.chinaunicom.jlmssp.model.Repaly_Expert_Home_Page;
import com.chinaunicom.jlmssp.services.Replay_ExpertManageService;


@Controller
@RequestMapping("/admin/Replay_ExpertManageController.do")
public class Replay_ExpertManageController {
  
  private static final HashMap TypeMap = new HashMap();

  static {
    TypeMap.put("image", "gif,jpg,jpeg,png,bmp");
    TypeMap.put("flash", "swf,flv");
    TypeMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
    TypeMap.put("file", "doc,docx,xls,xlsx,ppt,pptx,htm,html,txt,dwg,pdf");
  }


  @Autowired
  Replay_ExpertManageService replayExpertManageService;
    
    
    @RequestMapping(params = "op=getImageUpload", method = RequestMethod.POST)
    public void getImageUpload(@RequestParam("upload") CommonsMultipartFile file,HttpServletRequest request,
 HttpServletResponse response) {
      if (!file.isEmpty()) {
 
 
 //获取项目工作空间下工程路径的方法,将图片保存到工程路径下
 String t=Thread.currentThread().getContextClassLoader().getResource("").getPath();
  int num=t.indexOf(".metadata");
  String uploadPath=t.substring(1,num).replace('/', '\')+"jl_mssp_V3_0\WebContent\images\replay-expert\";
 
 // 文件上传大小
 long fileSize = 3 * 1024 * 1024;

 if (file.getSize() > fileSize) {
   backInfo(response, false, 2, "");
   return;
 }

 String OriginalFilename = file.getOriginalFilename();

 String fileSuffix = OriginalFilename.substring(
     OriginalFilename.lastIndexOf(".") + 1).toLowerCase();
 if (!Arrays.asList(TypeMap.get("image").split(",")).contains(
     fileSuffix)) {
   backInfo(response, false, 3, "");
   return;
 }

 if (!ServletFileUpload.isMultipartContent(request)) {
   backInfo(response, false, -1, "");
   return;
 }

 // 检查上传文件的目录
 File uploadDir = new File(uploadPath);
 if (!uploadDir.isDirectory()) {
   if (!uploadDir.mkdir()) {
     backInfo(response, false, 4, "");
     return;
   }
 }

 // 是否有上传的权限
 if (!uploadDir.canWrite()) {
   backInfo(response, false, 5, "");
   return;
 }
 
 //新文件名
 String newname = "";
 
 
  newname +=  "test1111" + "." + fileSuffix;

 File saveFile = new File(uploadPath, newname);

 try {
   file.transferTo(saveFile);
   backInfo(response, true, 0, newname);
 } catch (Exception e) {
   //LOG.error(e.getMessage(), e);
   backInfo(response, false, 1, "");
   return;
 }
      } else {
 backInfo(response, false, -1, "");
 return;
      }
    }
    
    // 返回信息
    private void backInfo(HttpServletResponse response, boolean flag, int message,
 String fileName) {
      String json = "";
      if (flag) {
 json = "{ "status": "success";
      } else {
 json = "{ "status": "error";
      }
      json += "","fileName": "" + fileName + "","message": "" + message + ""}";
      try {
 response.setContentType("text/html;charset=utf-8");
 response.getWriter().write(json);
      } catch (IOException e) {
 //LOG.error(e.getMessage(), e);
      }
    }
}

2、前台接受代码

使用ajaxfileupload时,首先下载ajaxfileupload文件,导入对应的js文件   



文件传输字段必须为file类型,如下:

 其次,处理上传文件:

function ajaxFileUpload() {
  $.ajaxFileUpload({
    type: "POST",
    async: false,
    data: { "op": 'getImageUpload'},
    url:"Replay_ExpertManageController.do",
    dataType: 'json',
    secureuri: false,
    fileElementId: "upload",
    success: function(data, status) {
      if (data.status == "success") {
 //上传成功
 alert("上传照片成功");
      }
      switch(data.message){
//解析上传状态
 case "0" : //上传成功
break;
 case "-1" : //上传文件不能为空
      break;
 default: //上传失败
    break;
      }
      return false;
    }
  });
}

三、由于网上的ajaxuploadfile文件都是高版本的,这里将改版完全版文件传上,自己使用

jQuery.extend({
  handleError: function( s, xhr, status, e )     {
    // If a local callback was specified, fire it
 if ( s.error ) {
   s.error.call( s.context || s, xhr, status, e );
 }

 // Fire the global callback
 if ( s.global ) {
   (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] );
 }
  },
  createUploadIframe: function(id, uri)
  {
 
    var frameId = 'jUploadframe' + id;
    
    if(window.ActiveXObject) {
      if(jQuery.browser.version=="9.0")
      {
 io = document.createElement('iframe');
 io.id = frameId;
 io.name = frameId;
      }
      else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0")
      {
      
 var io = document.createElement('