Проблема загрузки файла IE8 с формой jquery + контроллер Spring MVC, возвращающий XML - PullRequest
1 голос
/ 29 апреля 2011

Я разрабатываю компонент для загрузки изображений на основе формы jquery и Spring mvc controller, который создает объект xml, содержащий URL нового изображения на сервере.Мой код jquery на стороне клиента:

$('#uploadForm').ajaxForm({
beforeSubmit : function(a, f, o) {
    $('#uploadOutput').html('Uploading...');
},
success : function(response) {
    var $out = $('#uploadOutput');
    var url = $(response, 'url').text();
    $out.html('<img src="'+url+'4" alt="'+url+'"/>');
},
dataType : "xml"});

Моя форма:

<form id="uploadForm" action="http://localhost:8080/gossipdressrest/rest/imageupload/1" method="POST" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" /> 
<input type="file" name="file" />
<input type="submit" value="Submit" />

, а мой Spring MVC Controller:

@RequestMapping(value = "/rest/imageupload/{personId}", method = RequestMethod.POST)
public @ResponseBody
ImageUrl save(@PathVariable("personId") Long personId,
        @RequestParam("file") MultipartFile file) {
    try {
        ImagePk pk = imageManager.storeTmpImage(personId, file.getBytes());
        ImageUrl imageUrl = new ImageUrl();
        imageUrl.setUrl(imageUrlResolver.getUrl(pk));
        return imageUrl;
    } catch (Exception e) {
        logger.error(e.getMessage(), e);
        throw new RuntimeException(e);
    }
}

imageUrl - это POJO с единственным атрибутом 'url' типа String.Содержит URL загруженного изображения.Приведенный выше код корректно работает в Firefox и Chrome, но в IE8 он делает два запроса к серверу:

Первый кажется правильным и идентичен тому, что генерируется Firefox и Chrome.Но он генерирует другой запрос GET, который приводит к ошибке 405.

Запрос 1: POST / HTTP / 1.1 gossipdressrest / rest / imageupload / 1

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application / xaml + xml
Transfer-Encoding: chunked
Date: Thu, April 28, 2011 19:56:17 GMT

9e
<? xml version = "1.0" encoding = "UTF-8" standalone = "yes"?> <ImageUrl> <url> http://localhost:8080/gossipdressrest/image/1/TMP/-7884109442646822710/ </ url > </ ImageUrl>
0

Запрос 2: GET / gossipdressrest /rest / imageupload / 1 HTTP / 1.1

HTTP/1.1 405 M�todo No Permitido 
Server: Apache-Coyote/1.1
Allow: POST
Content-Type: text/html;charset=utf-8
Content-Length: 1097
Date: Thu, 28 Apr 2011 19:56:17 GMT

<html><head><title>Apache Tomcat/6.0.29 - Informe de Error</title>...

Любая идея; -)

Ответы [ 2 ]

2 голосов
/ 11 октября 2012

немного поздно, но, возможно, ответ может послужить другим людям.

Это, вероятно, вызвано тем, что ваш тип пантомимы установлен на application/x-ms-application или что-то вроде этого.например, вам нужно установить application/json.

Если вы используете Spring 3.1 или более позднюю версию, ваше ResquestMapping должно выглядеть так:

@RequestMapping(value = "/rest/imageupload/{personId}", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)

Ниже Spring 3.1 выприходится «вручную» устанавливать тип пантомимы в ответе.

0 голосов
/ 29 апреля 2011

Если вы измените на method = {RequestMethod.GET, RequestMethod.POST} это работает?

...