0

アップロードしたファイルをxmlファイルに変換できるアプリを作っています。アップロードしたファイルはxlsファイルです。Apache-poi を使用して xls から xml へのコンバーターを作成しました。アップロード機能とダウンロード機能も作りました。xls ファイルがアップロードされると、コントローラーによって xml に変換され、データベース (Mysql) に保存されるはずですが、失敗します。アプリは例外を返します。

java.lang.ClassCastException: org.springframework.web.multipart.commons.CommonsMultipartFile cannot be cast to java.io.InputStream

そして、これはコントローラーです:

@Controller
public class FileController {

@Autowired
private FileDAO documentDao;

@RequestMapping("/index")
public String showDocument(Map<String, Object> map) {
    try {
        map.put("document", new File());
        map.put("documentList", documentDao.list());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "documents";
}

@SuppressWarnings("deprecation")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public String save(@ModelAttribute("document") File document,
        @RequestParam("file") MultipartFile file) throws IOException {

    System.out.println("Name:" + document.getName());
    System.out.println("Desc:" + document.getDescription());
    System.out.println("File:" + file.getName());
    System.out.println("ContentType:" + file.getContentType());

    /*
     * start to convert xls to xml
     * */
    try {
        InputStream input = (InputStream) file;
        HSSFWorkbook workbook = new HSSFWorkbook(input);
        HSSFSheet spreadsheet = workbook.getSheetAt(0);

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.newDocument();
        doc.setXmlStandalone(true);

        Element spectraexchange = doc.createElementNS("http://www.lstelcom.com/Schema/SPECTRAexchange", "SPECTRAEXCHANGE");
        spectraexchange.setAttribute("xmlns:xsd", "http://www.w3.org/2001/XMLSchema");
        spectraexchange.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
        spectraexchange.setAttribute("version", "2.4.28");
        doc.appendChild(spectraexchange);

        for(int i=1; i<=2; i++){

            HSSFRow row = spreadsheet.getRow(i);

            Element application = doc.createElement("APPLICATION");
            spectraexchange.appendChild(application);

            Element svid = doc.createElement("SV_SV_ID");
            application.appendChild(svid);
            svid.appendChild(doc.createTextNode("12"));

            Element ssid = doc.createElement("SS_SS_ID");
            application.appendChild(ssid);
            ssid.appendChild(doc.createTextNode("140"));

            Element address = doc.createElement("ADDRESS");//men-generate <ADDRESS>
            application.appendChild(address);//men-generate </ADDRESS>
            address.setAttribute("AD_TYPE", "L");

            Element adspplus = doc.createElement("AD_SPPLUS_TYPE");//men-generate <AD_SPPLUS_TYPE>
            address.appendChild(adspplus);//men-generate </AD_SPPLUS_TYPE>
            adspplus.appendChild(doc.createTextNode("L"));//<AD_SPPLUS_TYPE>L<AD_SPPLUS_TYPE>

            try {
                Element adcompany = doc.createElement("AD_COMPANY");
                address.appendChild(adcompany);
                adcompany.appendChild(doc.createTextNode(row.getCell((short) 33).getStringCellValue()));
                if(row.getCell((short) 33).getStringCellValue()==null){
                    continue;
                }
            } catch (Exception e) {
                e.getMessage();
            }

            try {
                Element adstreet = doc.createElement("AD_STREET");
                address.appendChild(adstreet);
                adstreet.appendChild(doc.createTextNode(row.getCell((short) 35).getStringCellValue()));
                if(row.getCell((short) 35).getStringCellValue()==null){
                    continue;
                }
            } catch (Exception e) {
                e.getMessage();
            }


            Element adcountry = doc.createElement("AD_COUNTRY");
            address.appendChild(adcountry);
            adcountry.appendChild(doc.createTextNode("INS"));

            try {
                Element adcity = doc.createElement("AD_CITY");
                address.appendChild(adcity);
                adcity.appendChild(doc.createTextNode(row.getCell((short) 36).getStringCellValue()));
                if(row.getCell((short) 36).getStringCellValue()==null) {
                    continue;
                }
            } catch (Exception e) {
                e.getMessage();
            }

            Element station = doc.createElement("STATION");
            application.appendChild(station);

            Element transmitter = doc.createElement("TRANSMITTER");
            station.appendChild(transmitter);

            try {
                Element eqpname = doc.createElement("EQP_EQUIP_NAME");
                transmitter.appendChild(eqpname);
                eqpname.appendChild(doc.createTextNode(row.getCell((short) 2).getStringCellValue()));
                if(row.getCell((short) 2).getStringCellValue()==null){
                    continue;
                }
            } catch (Exception e) {
                e.getMessage();
            }


            Element eqptype = doc.createElement("EQP_TYPE_IS_APPROVED");
            transmitter.appendChild(eqptype);
            eqptype.appendChild(doc.createTextNode("1"));

            try {
                Element eqpmodel = doc.createElement("EQP_EQUIP_MODEL");
                transmitter.appendChild(eqpmodel);
                eqpmodel.appendChild(doc.createTextNode(row.getCell((short) 4).getStringCellValue()));
                if(row.getCell((short) 4).getStringCellValue()==null){
                    continue;
                }

            } catch (Exception e) {
                e.getMessage();
            }

            try {
                Element eqpprod = doc.createElement("EQP_EQUIP_PROD");
                transmitter.appendChild(eqpprod);
                eqpprod.appendChild(doc.createTextNode(row.getCell((short) 6).getStringCellValue()));
                if(row.getCell((short) 6).getStringCellValue()==null){
                    continue;
                }
            } catch (Exception e) {
                e.getMessage();
            }


        }

        TransformerFactory tfactory = TransformerFactory.newInstance();
        Transformer transformer = tfactory.newTransformer();
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty("{http:/xml.apache.org/xslt}indent-amount", "2");
        transformer.setOutputProperty(OutputKeys.STANDALONE, "yes");

        DOMSource source = new DOMSource(doc);
        StreamResult result = new StreamResult(System.out);
        //StreamResult result = new StreamResult("E://XlsToXml/standard_query02.xml");
        transformer.transform(source, result);
        /*
         * end of convertion
         * */

        //----------------------------------//
        Blob blob = Hibernate.createBlob(((MultipartFile) doc).getInputStream());

        document.setFilename(((MultipartFile) doc).getOriginalFilename());
        document.setContent(blob);
        document.setContentType(((MultipartFile) doc).getContentType());

        documentDao.save(document);

    }catch (IOException e) {
        System.out.println("IOException " + e.getMessage());
    } catch (ParserConfigurationException e) {
         System.out.println("ParserConfigurationException " + e.getMessage());
    }  catch (TransformerConfigurationException e) {
         System.out.println("TransformerConfigurationException "+ e.getMessage());
    } catch (TransformerException e) {
         System.out.println("TransformerException " + e.getMessage());
    }catch (Exception e) {
        e.printStackTrace();
    }

    return "redirect:/index.html";
}

@RequestMapping("/download/{documentId}")
public String download(@PathVariable("documentId") Integer documentId,
        HttpServletResponse response) {

    File doc = documentDao.get(documentId);

    try {
        response.setHeader("Content-Disposition", "inline;filename=\""
                + doc.getFilename() + "\"");
        OutputStream out = response.getOutputStream();
        response.setContentType(doc.getContentType());
        IOUtils.copy(doc.getContent().getBinaryStream(), out);
        out.flush();
        out.close();

    } catch (IOException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return null;
}

@RequestMapping("/remove/{documentId}")
public String remove(@PathVariable("documentId") Integer documentId) {

    documentDao.remove(documentId);

    return "redirect:/index.html";
}

}

コントローラーと何か関係があるのか​​もしれません。アイデア、解決策、または提案は大歓迎です。

よろしくお願いします、

ユヌス

4

1 に答える 1

2

これがそのエラーを与える行だと思います。

InputStream input = (InputStream) file;

MultipartFileオブジェクトfileを に直接キャストすることはできませんInputStreamgetInputStream()次のように のメソッドを使用する必要がありますMultipartFile:-

InputStream input = file.getInputStream();
于 2013-05-03T03:38:29.270 に答える