Как загрузить файл методом PUT через Ajax в Spring MVC?

У меня есть следующий код js для отправки запроса Ajax на URL-адрес, который отображает метод в Spring MVC.

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)?


person Tiny    schedule 30.11.2012    source источник


Ответы (1)


Я действительно не понимаю, как это предназначено для отправки составного файла на сервер? Данные содержат только идентификатор и время.

Попробуйте что-то вроде:

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);
        }
    });
}
person Alex Barnes    schedule 01.12.2012
comment
Окно предупреждения в разделе ошибок говорит только: Ошибка: [object Object] даже с data: $('#mainForm').serialize(), не повезло. - person Tiny; 01.12.2012
comment
Вы определили составной распознаватель в контексте весны? Как описано здесь stackoverflow.com/a/13405415/302387. - person Alex Barnes; 01.12.2012
comment
Да, я определил это MultipartResolver в моем файле applicationContext.xml, и он отлично работает (без Ajax), но JavaScript всегда говорит Error: [object Object] в случае Ajax. - person Tiny; 02.12.2012
comment
Из документов jQuery: typeString Значение по умолчанию: 'GET' Тип запроса (POST или GET), по умолчанию — GET. Примечание. Здесь также можно использовать другие методы HTTP-запроса, такие как PUT и DELETE, но они поддерживаются не всеми браузерами. - person Alex Barnes; 02.12.2012
comment
Я также попытался изменить метод запроса на POST, но он не загружает файл с помощью AJAX без использования некоторых методов, таких как скрытый iframe. Есть несколько плагинов jquery. которые решают эту проблему по-разному. Также. - person Tiny; 02.12.2012