大橙子网站建设,新征程启航

为企业提供网站建设、域名注册、服务器等服务

SpringMVC使用ajaxfileupload如何实现一个文件上传功能

这篇文章将为大家详细讲解有关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;

/**
 * 项目复制管理子系统
 * 专家云管理
 * @author SunYue
 * @version 0.1
 */
@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;
    
    /**
     * @author sunyue
     * @date 2017年2月28日 下午12:49:33
     * @Description: 图片上传方法
     * @return message: -1 没有文件上传 0 上传成功 1 上传失败 2 文件超过上传大小 3 文件格式错误 4 上传文件路径非法 5 上传目录没有写权限
     * @return void 返回类型
     */
    @RequestMapping(params = "op=getImageUpload", method = RequestMethod.POST)
    public void getImageUpload(@RequestParam("upload") CommonsMultipartFile file,HttpServletRequest request,
        HttpServletResponse response) {
      if (!file.isEmpty()) {
        /*ServletContext servletContext = request.getSession()
            .getServletContext();
        String uploadPath = servletContext.getRealPath("/")
            + "images\\replay-expert\\";
        
        String upPathString = request.getServletPath(); */
        
        //获取项目工作空间下工程路径的方法,将图片保存到工程路径下
        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 = "";
        /*if(null != filePre){
          newname += filePre;//对应模块上传的文件名前缀
        }*/
        
         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;
    }/* ,
    error : function (jqXHR, textStatus, errorThrown) {
      //弹出jqXHR对象的信息
      alert(jqXHR.responseText);
      //alert(jqXHR.status);
      //alert(jqXHR.readyState);
      //alert(jqXHR.statusText);
        //弹出其他两个参数的信息
      //alert(textStatus);
      alert(errorThrown);
      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('