イメージ全体ではなくイメージパスのみをデータベースに保存してください。
本当にお勧めです。バイナリデータをデータベースに格納することは、意味的に意味をなさない。あなたはそれを索引付けすることも、それを検索することもできません。それはちょうど "死んだ"データです。このファイルをディスクファイルシステムに直接格納して、その固有の識別子(通常はファイル名のみ)をデータベースに格納することができます。ファイル名はインデックス可能なvarcharにすることができます(したがって、より高速のSELECT ... WHERE
が可能になります)。
私はすぐに私に私が将来の使用のための私のデータベース列に格納するリンクを提供し、私のサーブレットから任意の画像ホスティングウェブサイトに直接自分のイメージを保存することができていますかどうかを知りたいですか?
具体的な問題は何かわかりません。バイトを転送することは、ちょうど任意のInputStream
を読んで、それを仲裁判断OutputStream
に書き込んだ後であることに気付くべきです。具体的な質問は、「アップロードされた画像のInputStream
を取得するにはどうすればよいですか」または「OutputStream
をローカルディスクファイルシステムに取得するにはどうすればよいですか」、または「画像にOutputStream
を取得するにはどうすればよいですか?ホスティングウェブサイト?
アップロードされた画像の取得は簡単ですInputStream
。すべてのまともなファイルアップロードAPIは、getInputStream()
メソッドの種類を提供します。参照How to upload files to server using JSP/Servlet?OutputStream
をローカルディスクファイルシステムのFile
にすることも簡単です。その周りにFileOutputStream
を構築するだけです。
File file = File.createTempFile(prefix, suffix, "/path/to/uploads");
InputStream input = uploadedFile.getInputStream();
OutputStream output = new FileOutputStream(file);
// Now write input to output.
String uniqueFileName = file.getName();
// Now store filename in DB.
OutputStream
を別のホストに取得することは、物語の中では別です。どのように接続したいですか? FTPを使用しますか? FTPClient#appendFileStream()
を使用してください。またはHTTP(eek)を使用していますか? URLConnection#getOutputStream()
またはHttpClientを使用してください。もしあなたが立ち往生すれば、より精細な質問をするべきです。
最後に、この画像をURL(<img src>
または直接リクエストなど)で取得するには、この回答をReliable data servingとお読みください。
えええええええええええええええええええええええええええええええんじつきんちゃん、どうもありがとうございました** **:画像をPicasaやFlickrなどに直接アップロードしたい場合はどうしたらいいですか?データベースに格納する.....ここに**は**それは私の愚かな考えだったことを意味します:)ローカルファイルシステムに格納する正しい方法です..ありがとう – Asif