【问题标题】:How to upload a file using the PUT method via Ajax in Spring MVC?如何在 Spring MVC 中通过 Ajax 使用 PUT 方法上传文件?
【发布时间】:2012-11-30 15:56:34
【问题描述】:

我有以下 js 代码将 Ajax 请求发送到映射 Spring MVC 中的方法的 URL。

function update(id)
{
    $.ajax({
        datatype:"json",
        type: "put",
        url: "/wagafashion/ajax/TempAjax.htm",
        data: "id=" + id+"&t="+new Date().getTime(),
        success: function(response)
        {
            alert(response);                        
        },
        error: function(e)
        {
            alert('Error: ' + e);
        }
    });
}

下面是简单的Spring表单,只有一个文件浏览器和一个按钮。

<form:form id="mainForm" name="mainForm" method="post" action="Temp.htm" enctype="multipart/form-data" commandName="tempBean">
    <input type="file" id="myFile" name="myFile"/>
    <input type="button" id="btnSubmit" name="btnSubmit" onclick="update(1);" value="Submit"/>
    <!--The js function is called when this button is clicked supplying 1 as id.-->
</form:form>

按下该按钮时,将调用 Spring 控制器中的以下方法。

@RequestMapping(method={RequestMethod.PUT}, value={"ajax/TempAjax"})
public @ResponseBody String update(HttpServletRequest request, HttpServletResponse response)
{
    System.out.println(ServletFileUpload.isMultipartContent(request));
    return "Message";
}

方法调用ServletFileUpload.isMultipartContent(request) 然而返回false


当我如下修改方法时,

@RequestMapping(method={RequestMethod.PUT}, value={"ajax/TempAjax"}, headers={"content-type=multipart/form-data"})
public @ResponseBody String update(@RequestParam MultipartFile file, HttpServletRequest request, HttpServletResponse response)
{
    System.out.println(ServletFileUpload.isMultipartContent(request));
    return "Message";
}

js 代码中的错误部分总是提醒Error: [object Object]。在这种情况下,即使使用 POST 方法也会发生同样的事情。

如何通过 Ajax 传递多部分内容(精确使用PUT 方法)?

【问题讨论】:

    标签: ajax spring file-upload put apache-commons-fileupload


    【解决方案1】:

    我真的不明白这是如何将多部分文件发布到服务器的?数据只包含 id 和时间。

    尝试类似:

    function update(id)
    {
        $.ajax({
            datatype:"json",
            type: "put",
            url: "/wagafashion/ajax/TempAjax.htm",
            data: $('#mainForm').serialize(),
            success: function(response)
            {
                alert(response);                        
            },
            error: function(e)
            {
                alert('Error: ' + e);
            }
        });
    }
    

    【讨论】:

    • 错误部分的警告框只显示“错误:[object Object]”,即使使用data: $('#mainForm').serialize(),,也没有运气。
    • 您是否在 spring 上下文中定义了多部分解析器?如此处所述stackoverflow.com/a/13405415/302387
    • 是的,我在我的applicationContext.xml 文件中定义了MultipartResolver,它工作正常(没有Ajax)但JavaScript 总是说,“Error: [object Object]” , 在 Ajax 的情况下。
    • 来自 jQuery 文档:typeString 默认值:'GET' 发出请求的类型(“POST”或“GET”),默认为“GET”。注意:这里也可以使用其他 HTTP 请求方法,例如 PUT 和 DELETE,但并非所有浏览器都支持。
    • 我也尝试将请求方法更改为 POST,但如果不使用隐藏 iframe 等技术,它似乎无法使用 AJAX 上传文件。有一些jquery plugins 以不同的方式解决它。 Also.
    猜你喜欢
    • 2021-03-08
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    • 2020-04-06
    • 2019-07-27
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多