0

私は春のMVCでファイルをアップロードしていますが、Firefoxでは正常に動作しますが、次の例外がスローされますIE9

  com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.

これが私のフォームです:

これが私のコントローラーです:

@RequestMapping(value = "/CIMtrek_Regional_WhseFormAddSave", method = RequestMethod.POST)
    public ModelAndView CIMtrek_Regional_Whse(
            @RequestParam("CIMtrek_xmlData") String CIMtrek_xmlData,
            @RequestParam("CIMtrek_formName") String CIMtrek_formName,@RequestParam("fileUPload") MultipartFile uploadFile,HttpServletRequest request) {

        UtilService fileUploadService = new UtilService();
        if(!uploadFile.isEmpty()) {
            fileUploadService.saveFile(uploadFile, request.getRealPath(""));
        }
        ViewContent vc = new ViewContent();
        String HTML = vc.getContent(CIMtrek_xmlData, CIMtrek_formName);
        List<String> ls = new ArrayList<String>();
        ls.add(HTML);
        logger.info("Welcome  CIMtrek_Regional_Whse Add!");
        return new ModelAndView("form", "list", ls);
    }

ファイル保存方法:

public void saveFile(MultipartFile uploadItem, String requestPath) {
        File dir;
        File file;
        try {
            String fileName = null;
            InputStream inputStream = null;
            OutputStream outputStream = null;
            if (uploadItem.getSize() > 0) {
                inputStream = uploadItem.getInputStream();
                fileName = requestPath + "\\resources\\Attachment\\";
                dir = new File(fileName);
                if (!dir.exists()) {
                    dir.mkdirs();
                }
                fileName += uploadItem.getOriginalFilename();
                file = new File(fileName);
                if (!file.exists()) {
                    file.createNewFile();
                }
                outputStream = new FileOutputStream(file);
                int readBytes = 0;
                byte[] buffer = new byte[10000];
                while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {
                    outputStream.write(buffer, 0, readBytes);
                }
                outputStream.flush();
                outputStream.close();
                inputStream.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

これを解決するのを手伝ってください。フォームを送信するときに、指定した場所にファイルを保存します。

よろしくお願いします

4

1 に答える 1

1

多くのWindowsプログラムは、UTF-8として保存されたドキュメントの先頭にバイト0xEF、0xBB、0xBFを追加します。これは、Unicodeバイトオーダーマーク(BOM)のUTF-8エンコーディングであり、バイトオーダーとは関係ありませんが、一般にUTF-8 BOMと呼ばれます。この欠陥の例は、レンダリングされるインターネットエクスプローラーです。標準モードでは、ドキュメント型宣言で始まる場合のみ。したがって、可能なBOMバイトをチェックしてスキップする必要があると思います

String enc = "ISO-8859-1"; // or NULL to use systemdefault
     FileInputStream fis = new FileInputStream(file);
     UnicodeInputStream uin = new UnicodeInputStream(fis, enc);
     enc = uin.getEncoding(); // check and skip possible BOM bytes
     InputStreamReader in;
     if (enc == null) in = new InputStreamReader(uin);
     else in = new InputStreamReader(uin, enc);

ソース:UnicodeInputStream

于 2013-02-08T13:31:00.280 に答える