FormData对象实现文件Ajax上传

后台:

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

/**
 *
 * @Description :文件上传
 * @version : 1.0
 * @Date : 2016年4月28日 下午1:17:53
 */
@Controller
@RequestMapping("/upload")
public class UploadController extends BaseController {
    private static final Logger log = LoggerFactory.getLogger(UploadController.class);
    @RequestMapping("/index")
    public String index() {
        return "upload/upload";
    }

    /**
     * 上传
     *
     * @param files
     * @param request
     * @param response
     * @return
     */
    @RequestMapping("/files")
    public @ResponseBody String file(@RequestParam MultipartFile[] files, HttpServletRequest request,
            HttpServletResponse response, String path) {
        String url = "";
        try {
            //
            for (MultipartFile file : files) {
                // 此处编写业务代码处理,组合url

            }
            System.out.println("上传文件路径:" + url);
            return url.substring(0, url.length() - 1);
        } catch (Exception e) {
            e.printStackTrace();
            log.error(e.getMessage(), e);
        }
        return url;
    }
}

页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>上传文件</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
<script type="text/javascript"
    src="<%=path%>/resources/js/jquery/jquery-1.8.3.min.js"></script>
<script type="text/javascript">

    $(document).ready(function(){
        $("#upload").click(function() {
            //FormData支持文件ajax上传
            //使用 jQuery 来发送 FormData,但必须要正确的设置相关选项:
            //processData: false,  // 告诉jQuery不要去处理发送的数据
            //contentType: false   // 告诉jQuery不要去设置Content-Type请求头
            //支持浏览器:Chrome 7+, Firefox(2.0) 4.0, Internet Explorer 10+, Opera 12+,Safari 5+
            var formData = new FormData($("#uploadForm")[0]);
            $.ajax({
                url : "<%=path%>/upload/files.html",
                data : formData,
                type : "post",
                dataType : "text",
                timeout : 3600000,
                async : true,
                cache : false,
                contentType : false,
                processData : false,
                success : function(data) {
                    if (data == "") {
                        alert("上传文件失败!");
                    } else {
                        $("#url").text(data);
                    }
                },
                error : function(data) {
                    alert(data);
                }
            });
        });

    });
</script>

</head>

<body>
    <center>
        <form id="uploadForm" enctype="multipart/form-data" method="post">
            选择文件:<input type="file" name="files" multiple="multiple"><br />
            <br /> <input type="button" value="上传" id="upload">
        </form>
        上传成功文件路径:<label id="url" />
    </center>
</body>
</html>
时间: 2024-10-04 02:33:35

FormData对象实现文件Ajax上传的相关文章

利用html5的FormData对象实现多图上传

有两种实现方式: 1.可以使用form的方式实现. html代码如下: <body> <form enctype="multipart/form-data" id="inputForm1" modelAttribute="bankAdminist" action="" method="post" class="form-horizontal"> <div c

多文件ajax 上传

html <!DOCTYPE html><html><head> <meta charset="UTF-8"/> <title>xhr2</title></head><body><div style="text-align:center;margin:100px"> <input type="file" id="file&q

玩转图片上传————原生js XMLHttpRequest 结合FormData对象实现的图片上传

var form=document.getElementById("formId"); var formData=new FormData(form); var oReq = new XMLHttpRequest(); oReq.onreadystatechange=function(){ if(oReq.readyState==4){ if(oReq.status==200){ var json=JSON.parse(oReq.responseText); console.log(j

Jquery FormData文件异步上传 快速指南

网站中文件的异步上传是个比较麻烦的问题,不过现在通过jquery 可以很容易的解决这个问题: 使用jquery2.1版本,较老版本不支持异步文件上传功能: 表单代码: [html] view plain copy print? <form id="fileUploadForm"> <input type="file" name="file" class="imageUpload"/> <span 

Django框架 之 Form表单和Ajax上传文件

浏览目录 Form表单上传文件 Ajax上传文件 伪造Ajax上传文件 Form表单上传文件 html <h3>form表单上传文件</h3> <form action="/upload_file/" method="post" enctype="multipart/form-data"> <p><input type="file" name="upload_fi

基于HTML5的可预览多图片Ajax上传

一.关于图片上传什么什么的 在XHTML的时代,我们使用HTML file控件上传图片一次只能上传一张.要一次上传多图,做法是借助于flash.例如swfupload.js.可惜,使用复杂的点,比如flash文件需与页面同父文件夹,JavaScript文件大小也很可观. 我之前曾翻译编辑过一篇“Ajax Upload多文件上传插件”的文章,此插件的亮点是使用隐藏的iframe框架页面模拟ajax上传,但是,实际上,还是一次只能上传1张图片,可以多次上传而已. HTML5是个好东东,其中之一就是支

【原创】AJAX上传文件,formdata表单提交问题

今天遇到一个特别神奇的问题,AJAX上传文件,formdata表单提交问题,后台显示无法获取上传文件. 排查许久发现是formdata.append();时,要先添加file,而后添加其他参数.方可正常工作. 可是却不知到底是和原因.去了火狐开发者社区也未能找到答案. 还望知道的大神赐教一二.

atitit.ajax上传文件的实现原理 与设计

atitit.ajax上传文件的实现原理 与设计 1. 上传文件的三大难题 1 1.1. 本地预览 1 1.2. 无刷新 1 1.3. 进度显示 1 2.  传统的html4  + ajax 是无法直接实现上传文件 1 2.1. 传统的实现方式iframe 2 2.2. html5转码base64 3 2.3. 其它插件FLASH的实现原理 3 3. 上传进度的实现原理 3 3.1. 使用ajax结合服务端的进度返回,比較麻烦 4 4. 本地预览的解决 4 4.1. 用HTML5上传文件 4 5

基于jQuery的ajax系列之用FormData实现页面无刷新上传

接着上一篇ajax系列之用jQuery的ajax方法向服务器发出get和post请求写,这篇主要写如何利用ajax和FormData实现页面无刷新的文件上传效果,主要用到了jQuery的ajax()方法和XMLHttpRequest Level 2的FormData接口.关于FormData,大家可以看MDN文档. 1,先看效果图 期望的功能和效果很简单:点击页面中的上传文件表单控件,选择文件后点击"ajax提交",将文件上传至服务器,上传成功后,页面给出一个简单的提示. 2,前端的代