1

jQuery-File-Uploadと Spring MVC のようなサーバー部分を使用しています。この例を試してみましたが、IE 9 ブラウザーでは機能しません。「オブジェクトを保存しますか、開きますか」

クライアントは例のようになります:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>jQuery File Upload Example</title>
</head>
<body>
<input id="fileupload" type="file" name="files[]" data-url="/fileUpload/1" multiple>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.iframe-transport.js"></script>
<script src="js/jquery.fileupload.js"></script>
<script>
$(function () {
    $('#fileupload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p/>').text(file.name).appendTo(document.body);
            });
        }
    });
});
</script>
</body> 
</html>

サーバーは次のとおりです。

@RequestMapping(value = "fileUpload/{id}", method = RequestMethod.POST)
    @ResponseBody
    public FileUploadResultDTO upload(MultipartFile file,
                                      @PathVariable Long id,
                                      Locale locale,
                                      HttpServletRequest request) {
        FileUploadResultDTO resultDTO = new FileUploadResultDTO();
        // Logic saving file and return back response like object
        return resultDTO;
    }

public class FileUploadResultDTO {
    private Long photoId;
    private String pathToPhoto;
    private String pathToSmallPhoto;

// getters/setters
}

IEを除くすべてのブラウザで動作します

4

2 に答える 2

1

私はまったく同じ問題を抱えていましたが、「application/json」ではなく「text/plain」コンテンツを常に生成するようにメソッドを変更することで解決できました。これを行うには、'produces="text/plain"' をリクエスト マッピング アノテーションに追加し、戻り値の型を String に変更し、Jackson を使用して手動でオブジェクトを Json に変換しました。

あなたのコードでは、これは次のようになります。

@RequestMapping(value = "fileUpload/{id}", method = RequestMethod.POST, produces="text/plain")
@ResponseBody
public String upload(MultipartFile file,
                                  @PathVariable Long id,
                                  Locale locale,
                                  HttpServletRequest request) {
    FileUploadResultDTO resultDTO = new FileUploadResultDTO();
    // Logic saving file and return back response like object
    return Jackson.toJsonString(resultDTO);
}

これは、IE9 (iframe トランスポートを使用する) とそうでない最新のブラウザーの両方で機能するようですが、正しいタイプは「application/json」である必要があるため、少しハックなようです。

于 2013-10-31T08:27:54.650 に答える
0

あなたの質問は次のように聞こえます:

IE は、サーバーからの json の結果を開くか保存するように求めます

それが役に立てば幸い

于 2012-12-24T19:55:50.023 に答える