2016-07-17 4 views
0

私はdropwizardを使ってかなり従来のファイルアップロード方法を作っています。なぜdropwizardはxlsファイルをアップロードしませんか?

だから私は内部の特別な何も

@POST 
@Path("/uploadFile") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@UnitOfWork 
public Response uploadFile(
    @FormDataParam("file") final InputStream fileInputStream, 
    @FormDataParam("file") final FormDataContentDisposition contentDispositionHeader, 
    @Context HttpServletRequest request) throws IOException {... 

次のようにオフに開始し、リソースのメソッドを持っている、それだけでとても

java.nio.file.Path outputPath = FileSystems.getDefault() 
    .getPath(System.getProperty("user.home"), fileName); 

    if (!Files.exists(outputPath.getParent())) 
     Files.createDirectories(outputPath.getParent()); 

    Files.copy(fileInputStream, outputPath); 

のように、java.nioのライブラリを使用して、パスに保存されますそれは単にExcelファイルをアップロードしません。私は他の場所でファイルを読み込み、それらの根底にあるタイプを疑問視しています。どうすればいいですか?

+1

何が問題なのですか?いくつか例外がありますか? 「アップロードしない」とは、任意の数のことを意味します。少し具体的になりますか? –

+0

@peeskillet - 悪い状態で質問を残して申し訳ありません。この問題は、実際の出力ストリームに対してnio.file(私は思う)の悪い使用法にまで下がっていました。私はその質問に答えて、私がしたことを示します。 –

+0

Repoをすばやく見てみると、それはニオのものではなく、Files.copyメソッドの使い方が悪いことを示しています。私は休日に行って、これについてすべて忘れました:-) –

答えて

0

基本的に、このメソッドは他のファイルでは機能しましたが、xlsファイルはアップロードしませんでした。私は正確な理由を知らないが、私の疑惑は質問に掲載されている。私はそれが働いてしまった方法は、バイト配列に入力ストリームを読み取ることによって、(私はセキュリティ機能である疑いがあるものを)の周りを取得

OutputStream outputStream = null; 
    try { 
     outputStream = new FileOutputStream(new File(outputPath.toString())); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 
     while ((read = fileInputStream.read(bytes)) != -1) { 
      outputStream.write(bytes, 0, read); 
     } 
     outputStream.flush(); 
    } 
    catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
    finally{ 
     outputStream.close(); 
    } 

との単純なコピーライン

Files.copy(fileInputStream, outputPath); 

を交換しました、それを新しいFileOutputStreamに書き込みます。

「正しい方法」がある人は、これよりも優れていれば、それを見るのはクールです。スタックトレースは、何が起こっていたかについて私には何も教えてくれませんでした。

関連する問題