0

これは、Windows 7 プラットフォームでローカル Java サーバーを使用してファイル アップロード機能をテストすることに関する質問でした。質問はマルコの意見によって発展したので、私はそれを編集して、同じ課題に出くわした人が進化の詳細に時間を無駄にせず、より早く結論に達するようにしました.

課題は、アップロードされたファイルを WAR 構造外のフォルダーに転送し、そこから正常に読み取ることでした。例: に画像をアップロードし、画像c:/tmp/を表示する確認ページにリダイレクトします<img src="c:/tmp/test.jpg" />。アップロードはできましたが、画像が表示されませんでした。また、Marko の入力に基づくと、これは理にかなっています。なぜなら、localhost にあるブラウザは、を使用してローカル ディスク構造から何かをロードすることを拒否するからc:です。おそらく、これらは、デフォルトのパスを設定できないファイル入力制御に関するものと同様のセキュリティ上の考慮事項です...

次のタグは、ローカルで作成された .html ファイルでは機能しますが、jsp に貼り付けると機能しません。違いは、ブラウザが localhost を使用して jsp にアクセスすることです。

<img src="c:/tmp/test.jpg" />

ソリューション

マルコの答えは、何をする必要があるかをほぼ定義していると思います。私はそのアプローチを採用しませんでしたが、明らかにそれがより良い方法であり、それを答えとして受け入れます. ありがとう、マルコ!

わざわざ Web サーバーをインストールしたくなくて、多少のハックを受け入れる気がある人のために、私が行ったことを以下に示します。繰り返しになりますが、ファイルを WAR 構造にアップロードしたくありませんでした。サーバーにデプロイする前に、そのフォルダーをクリアすることを覚えておく必要があるからです。ただし、そのアップロード フォルダーには引き続きアクセスできる必要があるため、別のダミー プロジェクトを作成し、そのアップロード フォルダーをその WebContent の下に配置しました。これは、私のローカル テストの目的で機能します。唯一の厄介な点は、ファイルをアップロードした後、ダミー プロジェクトの WebContent を Eclipse で更新する必要があることです。

config.properties

#for uploading files
fileUploadDirectory=C:/javawork/modelsite/tmp/WebContent

#for building html links
publicFileServicePrefix=http://localhost:8080/tmp

<img src="http://localhost:8080/tmp/test.jpg" />  // this works - tmp is the name of my dummy project.
4

1 に答える 1

1

ブラウザにアクセスするHTML(「ビューソース」を介してアクセスするHTML)を文字通り引用している場合、これはJavaとは何の関係もありません。これらのリンクを解釈するのはブラウザです。ロードに失敗した場合、問題はブラウザ/ファイルシステムにあります。

アップデート

追加の診断の結果によると、インターネットURLからのHTMLファイルから参照されている場合、そのURLがである場合でも、ブラウザはローカルディスクからの読み込みを(賢明に!)拒否すると結論付けますlocalhost

更新2

(削除、無関係)

更新3

サーバーにアップロードされたファイルをどのように処理しても、ソリューションのようには見えません。ファイルはクライアントではなく、サーバーのローカルファイルシステムにあります。この種のことは、Apache HTTPサーバーレベルで処理できます。静的コンテンツ用にURLセクションを予約し、静的コンテンツを提供するベースディレクトリを使用してApacheを構成します。サーバーをローカルで実行している場合でも、サーバーをテストするのと同じマシンで、ネットワークインターフェイスを経由する必要があります。

于 2012-04-14T18:36:05.577 に答える