2017-02-21 4 views
0

アップロードされたファイルをマルチパートとして受け取ったTomcatサーバーに配置された安らかなJersey Webサービスにファイルをアップロードしようとしています。これは、Windows OS上で完全に正しい動作しますが、Linux上のファイルには、以下の保存方法からスロー例外なく保存に失敗:アップロードされたファイルがJava-Jerseyで例外がスローされずに保存されない

@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadProductImage(
     @FormDataParam("file") final InputStream uploadedInputStream, 
     @FormDataParam("file") final FormDataContentDisposition cdh, 
     @FormDataParam("file") final FormDataBodyPart body 
) { 
    FileManager fileManager = new FileManager(); 
    String fileName; 

    try { 
     int read = 0; 
     byte[] bytes = new byte[1024]; 
     OutputStream out = new FileOutputStream(new File("/home/files")); 

     while ((read = uploadedInputStream.read(bytes)) != -1) { 
      out.write(bytes, 0, read); 
     } 
     out.flush(); 
     out.close(); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 

    return Response.status(Response.Status.CREATED).entity(gson.toJson(cdh.getName())).build(); 
} 

マルチパートの変数がすでにweb.xmlファイルで宣言されているよう:

<init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.media.multipart.MultiPartFeature</param-value> 
    </init-param> 

コードに見られるように、ターゲットパスは "/ home/files"です。
パスが存在し、ターゲットファイルの所有者をtomcatグループに変更しようとしましたが、パスのすべてのアクセス許可を結果なしで付与しました。 私はあなたの助けに感謝します。

+0

*パスが存在することを確信しています。*存在する場合は、あなたが許可を持っているかどうか疑いがあります。あなたの例外をキャッチするコードを表示してください –

+0

'uploadedInputStream'はどこに設定されていますか?ファイルが開かないと表示されません。 –

+0

このアップデートでは、このメソッド全体が表示されています。アップロードされているため、以前にファイルが存在していない可能性があります。 – MrMisery

答えて

0

これで、ファイルの書き込みが失敗したり、例外として例外がスローされず、コードが正常に動作していたことがわかりました。この場合、このタイプの問題を解決するためにできることは次のとおりです。

  1. パスは戦争の体の外にあるので、tomcatディレクトリのserver.xmlファイル内に指定​​する必要があります。
  2. ディレクトリグループはTomcatグループと同じでなければならず、linuxターミナルでchgrpコマンドで変更できます。
  3. linuxのchmodコマンドを使用して、ディレクトリのグループに許可を与える必要があります。
関連する問題