1

私はSpring MVCを使用してファイルのアップロードに取り組んでいますが、FirefoxとChromeでは正常に動作しますが、IEではアップロードに失敗しました..以下は、fileuploader関数を含む私のjspページです。

<div id="file-uploader-demo1" style="float: left;padding-top: 10px"></div>      

</div>

 <script>        
    function createUploader(){            
        var uploader = new qq.FileUploader ({
            element: document.getElementById('file-uploader-demo1'),
            action: '/Flas_ _/commu-____/insertFile;jsessionid=${sessionId}',
            headers: {'Content-type':'multipart/form-data'},
            multipleFileUpload: false,
            debug: true
        });           
    }
    window.onload = createUploader;     
</script> 

これが私のjspページで、FileUploader.jsファイルを含むiamが、アクションタグが以下に示すそれぞれのコントローラーを呼び出します..

 @RequestMapping(value = "/insertFile", method = RequestMethod.POST)
public String fileUpload(@RequestParam("qqfile") String filename1,ModelMap map, 
        HttpServletRequest request,HttpServletResponse response) throws IOException {



    PrintWriter writer = null;
    InputStream is = null;
    FileOutputStream fos = null;

      try {
            writer = response.getWriter();
        } catch (IOException ex) {
            //log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
        }
      String filename =  request.getHeader("X-File-Name");
      this.setFILEUPLOAD(filename);
      try {
            is = request.getInputStream();
            fos = new FileOutputStream(new File("F:/images/" + filename));
            IOUtils.copy(is, fos);
            response.setStatus(response.SC_OK);
            writer.print("{success: true}");
        } catch (FileNotFoundException ex) {
            response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
            writer.print("{success: false}");
          //  log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
        }catch (IOException ex) {
            response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
            writer.print("{success: false}");
           // log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
        }  finally {
            try {
                fos.close();
                is.close();
            } catch (IOException ignored) {
            }
        }
      writer.flush();
        writer.close();

    return "do-nothing";
}

ただし、CHROME と FIREFOX では問題なく動作し、ファイルをロケール ドライブに保存します。しかし、IE 9 では動作しません。どうすればよいでしょうか。

disの解決策はありますか?助けてくださいありがとう。

4

1 に答える 1

0

2 つのコントローラー メソッドを実装することで、もう 1 つの問題 (IE で動作し、FF では動作しない) を解決しました。JavaScript アップローダー構成で explizit ヘッダーを送信しませんでした。

1 つのメソッド (IE 用) には、追加の RequestMapping-Options があります。 headers = { "content-type=multipart/form-data" }

IE の RequestParam はMultipartFile. そこから、ファイル名とコンテンツを取得します。IE で使用される通常のマルチパート アップロードのリクエスト ボディには、Firefox での ajax アップロードのようにファイル コンテンツが含まれているだけではありません。また、ファイル名や境界などのマルチパート情報もあります。MultipartFileこれを処理できます。

私の知る限り、Web アプリケーションがマルチパート ファイルのアップロードを処理できるようにするには、いくつかの一般的な設定を行う必要があります。しかし、それは別の質問です。

于 2012-08-15T13:43:11.603 に答える