2017-02-02 20 views
0

以下で私を助けてください。私はCSVファイルをダウンロードできる「DownloadFile」サーブレットを持っています。サーブレットはローカルのWindowsマシン上で動作していますが、私のサーバー上では、ダウンロードファイルのパスを拒否するエラーが発生しています。Tomcatでの許可が拒否されました

TomcatがTomcatユーザーにインストールされています。 Tomcatのユーザーはいくつかのフォルダの所有者ですが、私は依然として権限を拒否されています。

以下

はコードとエラーです:

File f = new File("\\opt\\tomcat\\logs\\myfile.csv"); 
     int length = 0; 
      ServletOutputStream op = response.getOutputStream(); 
      ServletContext context = getServletConfig().getServletContext(); 
      String mimetype = context.getMimeType("text"); 

     response.setContentType((mimetype != null) ? mimetype: "application/octet-stream"); 
     response.setContentLength((int) f.length()); 
     response.setHeader("Content-Disposition","attachment; filename=csv1.csv"); 

エラー:

YPE例外レポート

メッセージ\オプト\ Tomcatを\ログ\ myfile.csv(パーミッション拒否)

説明サーバーがこの要求を実行できないような内部エラーが発生しました。

例外のUNIXベースの環境で

java.io.FileNotFoundException: \opt\tomcat\logs\myfile.csv (Permission denied) 
    java.io.FileOutputStream.open0(Native Method) 
    java.io.FileOutputStream.open(FileOutputStream.java:270) 
    java.io.FileOutputStream.<init>(FileOutputStream.java:213) 
    java.io.FileOutputStream.<init>(FileOutputStream.java:101) 
    java.io.FileWriter.<init>(FileWriter.java:63) 
    in.travelfiles.Csv1.doGet(Csv1.java:51) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:622) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 

答えて

1

ファイルの区切りがスラッシュです。 Unixマシンでは、バックスラッシュ文字が好きではありません。

String fileSeparator = System.getProperty("file.separator"); 
String fileName = fileSeparator + "opt" + fileSeparator + "tomcat" + 
        fileSeparator + "logs" + fileSeparator + "myfile.csv"; 

fileNameには、WindowsまたはUNIX上で動作します:あなたはファイルパス文字列を構築する場合、Javaはあなたのようなものを使用してO/Sに依存しない方法でこれを作成することができます。

私はあなたがファイルを読むことができるかどうかを見ることから始めます。 O/Sは、Tomcatを実行しているユーザにファイルを読み込ませることはできませんが、まずそれをUnixが理解できるパスに入れることが可能です。

関連する問題