0

ユーザーは私のウェブサイトに画像をアップロードできます。サーブレットはアップロードを Web アプリケーションのディレクトリ イメージに書き込む必要があります。ディスクに書き込むには、File() オブジェクトを作成する必要があります。

1つの方法は、次のようなものへの完全なパスをハードコーディングできることです

new File("/usr/tomcat/webapps/ROOT/images/file.jpg")

..のようなものを指定できる方法はありますかnew File("images/file.jpg").完全なパスをハードコードする必要がないように、新しいファイル (URI uri ) を使用してそれを行うことはできますか? 私のサーブレットは内部にあります/usr/tomcat/webapps/ROOT/WEB-INF/classes/

images フォルダはディレクトリではありません。実際には、Tomcat 以外のファイルシステム上の別のディレクトリを指しているシンボリック リンクです。

4

3 に答える 3

2

Webアプリのデプロイディレクトリの下に画像を保存しないでください。次にアプリを再デプロイするときに、すべての画像が失われます。さらに、通常はwarファイルとしてデプロイされるため、Webアプリケーション用のディレクトリが常にあるとは限りません。

画像を外部の場所、絶対パスに保存し、この場所から画像を提供するようにTomcatまたは別のWebサーバーを構成するか、この場所から画像を提供するサーブレットを実装します。

追加のポインタについては、JSPでの画像のアップロードと表示を参照してください。

編集:

問題がJavaコードのハードコーディングされた絶対パスである場合は、Tomcatの起動時に設定したSystemプロパティ、またはweb.xmlのコンテキストパラメータを使用するか、プロパティファイルを使用してパスまたはデータベースを保存します。

于 2012-05-28T12:10:50.927 に答える
0

ServletContextオブジェクトからWebアプリのパスを取得できます。ServletContextは、HttpServletRequestオブジェクト(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getServletContext%28%29)から取得します。http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContext.html#getRealPath%28java.lang.String%29
を参照してください 。「実際のパス」を目的のイメージファイルパスに連結し、これを次のように指定します。 Fileコンストラクタへのパラメータ。

于 2012-05-28T12:10:29.050 に答える
0
 try{    

String directory = //Store it in your Property file and pick it 

String filename= //Generate Dynamic name or any specific format 
   // Create file    
  FileWriter fstream = new FileWriter(directory+filename);   
  BufferedWriter out = new BufferedWriter(fstream);  
    out.write("your content"); }
catch (Exception e){   
  System.err.println("Error: " + e.getMessage()); }
finally {  
   //Close the output stream
     out.close();
 } 

ディレクトリ パスが頻繁に変更されない場合は、プロパティ ファイルにディレクトリ パスを保持できます。ディレクトリ名はハード ドライブ パスの絶対パスにすることも、Web アプリケーションに保存することもできますが、入力ファイルは常に Web アプリケーションの外に置くことをお勧めします。

同じファイル名を保持したい場合、ファイルの命名は常にあなた次第です。重複チェックを処理する必要がある場合は、動的な形式を指定して名前を付けます。

于 2012-05-28T12:14:33.953 に答える