-1

以下は私がjsf2.0に持っているものです

<tr>
    <th width="19%" align="left"><h:outputLabel value="Photo" /></th>
    <th width="2%">:</th>
    <td width="19%"><h:inputText value="#{PersonalInformationDataBean.photo}" size="80" id="photo" readonly="true"/> 
    <input type="file" name="pathPhoto" onchange="alert('you changed me...'+window.document.patentForm.pathPhoto.value);window.document.patentForm.photo.value=window.document.patentForm.pathPhoto.value"/></td>
</tr>

ボタンをクリックしChoose Fileてファイルを選択すると、別のパスが表示されます。

ChromeとSafari

パス名をとして取得しますC:\fakepath\jobs_dubizzle.rtf。場所に関係なく、常に出力が返されC:\fakepath\FileNameます。

Mozilla Firefox

それは私に完全な道を与えてくれます。

なぜ私がこのようになっているのか分かりますか?(ブラウザ間での動作の違い。)そして、どのように克服するのですか?MySQLデータにパスを格納するために同じパスを使用できるように、そのファイルのフルパスが必要です。




アップデート1

私がやりたかったのは、フォームを送信するときに、そのファイルをmysqlデータにアップロードすることです。今は画像を選んでいます。画像をアップロードするには、ここに記載されているコードを使用します。

ご覧のとおり、以下のステートメントにはフルパスが必要です。

File image = new File("C:/image.jpg");

そのため、選択したファイルのフルパスを取得したいと思いました。

これを取得するためのアイデアはありますか?

4

1 に答える 1

0

Webアプリケーションでは、サーバー上のファイルの検索に依存することは望ましくありません。あなたができる最善のことは、アプリケーションのルートに保存し、次のように取得することです。

ExternalContext external = FacesContext.getCurrentInstance().getExternalContext();
ServletContext servletContext = (ServletContext) external.getContext();
InputStream is = servletContext.getResourceAsStream("image.jpg");

ただし、理想的には、JSFを使用していて、サーブレット3.0コンテナを使用している場合は、ここにある彼のブログでBalusCによって作成されたファイルアップロードを使用することをお勧めします

サーブレット3.0がない場合は、CoreJavaServerFacesの教科書に書かれているファイルアップロードの例を使用できます。ソースコードは、ch13ディレクトリにある作者のサイトからダウンロードできます。

また、上記のコンポーネントのいずれかを使用してフォームを送信すると、アクションメソッドでデータベースに保存するなど、やりたいことが何でもできます。

または、PrimeFacesのようなライブラリを使用できる場合は、すぐに使用できる優れたファイルアップロードコンポーネントがあります。

于 2012-07-03T02:03:29.517 に答える