urizakaです。

さて、JSP+SQL-Server2000でExcel等のファイルをバイナリデータとしてDB
のimageフィールドに登録して、それをダウンロードするというプログラムを
組んでおり、なんとかファイル名とそのバイナリ-データをアップロードすることはできるようになったのですが、その後、バイナリ-データをDBからダウンロードして、その後にどのようにすれば良いのかが分かりません。
 バイナリ-データをDBから検索して持ってきて、ブラウザー上でそのファイルが展開されるようにしていのですが…(よくPDFのサイトを開くと、自動的にPDFが展開されるように)
 バイナリ-データにファイル名とそのファイルのタイプを与えてやれば良いような気もするのですが、それをどうやって与えてやればいいのかも皆目見当がつきません。すみませんが、ご存知の方がいらっしゃったら教えてください。
 宜しくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

かなり昔にやったのでうろ覚えですが...



1.コンテントタイプの指定(Download だけならapplication/octet-streamでもいいかも)
response.setContentType(コンテントタイプ);

2.ファイルサイズの指定
response.setContentLength(ファイルサイズ);

3.ファイル名の指定
response.setHeader("Content-Disposition", "attachment; filename=\" +
ファイル名 + "\"");
response.setHeader("Content-Disposition", "inline; filename=\" +
ファイル名 + "\"");
たしか昔attachmentかinlineかで悩んだ記憶があって、どっちだったか思い出せません。
すいませんがこれで確かめてみて下さい。
    • good
    • 0
この回答へのお礼

urizakaです

回答ありがとうございます。

色々試してみて何とかできました。
しかしながら、このDBにデータを収める方法ってあまりパフォーマンス的によくないですね。アップロードはともかく、ダウンロードで共有フォルダを使う方法と比べていい結果が出ませんね…私のプログラムの仕方が悪いのかもしれませんが。

以前、同じ方法を行われたということですが、akinori_sさんの時はパフォーマンス的にはどうでしたか?

それでは

お礼日時:2002/01/25 20:00

返事遅れました。

すみません。

パフォーマンスは悪かったですよ。
仕方ないと思います。
では、ガンバッテください。
    • good
    • 0

すみません。

まとまりなくて。
また少し思い出しました。前回答に加えファイル名をresponseに設定した憶えがあります。うる憶えですみません。
    • good
    • 0
この回答へのお礼

urizakaです

 ありがとうございます、おかげでなんとかできました。
しかしながら、このDBを使う方法ですが1MBぐらいまでならともかく、それ
以上の容量になると共有フォルダを使う方法に比べて非常にパフォーマンスが
悪いですね。
 私のプログラムの書き方が悪いだけかもしれませんが…

 imamuさんがプログラミングした時はどうでしたか?

 それでは。

お礼日時:2002/01/25 20:08

私はServlet+OracleDBで経験がありますが、ずいぶん前の話で大まかなことしか覚えていません。

しかし参考になるかもしれないのでお伝えします。
OracleDBにBLOBで入っているイメージをInputStreamで取り出しそのデータをServletのOutputStreamに書き込んだら出来ました。ただそのときcontent-typeなどの設定もした憶えがありますが、どのように設定したかは憶えていません。Excelもバイナリなら同じ方法でcontent-typeをExcelに定義されているものにすればいいのではないでしょうか?Servletでの話ですが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qサーブレットでバイナリの入力データを扱いたい

サーブレット/Java初心者です。

サーブレットで、
request.setCharacterEncoding("UTF-8");
String hoge1 =request.getParameter("hoge1");
String hoge2 =request.getParameter("hoge2");
のように、リクエストパラメータを取得しています。

hoge2だけ、UTF-8ではなく、バイナリデータとして解釈し、byte[]の変数に格納したい場合は、どうすればよいのでしょうか?

APIのドキュメントを見ても、使えそうなメソッドがなくて困っています。

Aベストアンサー

以後はこちららしい。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=34934&forum=12

QDB2のJDBCを使用したDBコネクションの取得方法の違い

WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。
このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。

その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名

その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。

ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定した番号を指定しました。

この両者の違いをご存知の方は教えてください。
また、その2の方法でなぜ失敗したのか、見当がつく方がいたらこちらも教えていただきたいと思います。

なお、実行環境は以下の通りです。

CPU ペンティアム3 800Mhz
メモリ 512MByte
OS Windows2000 SP2
ブラウザ IE5.5 SP2
AS Websphere 4.0
DB DB2 7.2

※WebshpereとDB2は同一マシンにインストールされています。

WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。
このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。

その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名

その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。

ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定...続きを読む

Aベストアンサー

まず、
その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名
の違いですが、
「その1」の方はJava実行マシンとDB2サーバが同じホスト上にある場合(Type2のJDBCドライバ用?)に使うようです。
それに対して、「その2」は、ホスト名とポート番号を指定していることからわかるように、Java実行マシンとDB2サーバが別々のホスト上にある場合(Type4のJDBCドライバ用?)に使うようです。

で、なんで「その2」で接続ができないのかという原因ですが、
(1)サーバー側の設定が足りない
(2)ドライバ名が違う
の2つが考えられます。

(1)の方は、サーバー側で「このポート番号でJDBC接続を待ち受けます」という設定を行う必要があります。これは、"db2jstrt <ポート番号>"というコマンドをサーバー上で実行することで、設定できます。
(2)の方は、"COM.ibm.db2.jdbc.net.DB2Driver"というJDBCドライバを使っているか確認してください。"COM.ibm.db2.jdbc.app.DB2Driver"ではありません。こっちだと、「その1」の方の接続方法しかサポートしていないような気がします。(よく調べていないのでわかりませんが)

以上2点を確認してみては?

まず、
その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名
の違いですが、
「その1」の方はJava実行マシンとDB2サーバが同じホスト上にある場合(Type2のJDBCドライバ用?)に使うようです。
それに対して、「その2」は、ホスト名とポート番号を指定していることからわかるように、Java実行マシンとDB2サーバが別々のホスト上にある場合(Type4のJDBCドライバ用?)に使うようです。

で、なんで「その2」で接続ができないのかという原因ですが、
(1)サーバー...続きを読む

QDBサーバー(A)とDBサーバー(B)を双方向のバッチ処理で更新させよ

DBサーバー(A)とDBサーバー(B)を双方向のバッチ処理で更新させようと思っています。

ですが、そもそもAのDBからBのDBにデータを送るにはどうしたら良いかがわかりません。
httpプロトコルでバッチ処理をやることになっているのですが、
サーバーが違うしWEB SessionやHTTP リクエストを受け取れるのだろうか?
そもそも大量のデータを一括で遅れるのだろうかと疑問があります。

HTTPリクエストだと「アドレス?パラメータ」の形でデータを送信して
受けとるというのがスタンダードなやり方ですが、大量のデータは難しいと思ってしまいます。

こういった形でデータ授受を行う場合、
ロジック的にはどういうふうになるのでしょうか。
またhttpプロトコルで大量のデータを送るにはどうすれば良いのでしょうか。

Aベストアンサー

手順

1)
Aからデータを抽出して
(例えばCSVファイルかなんかにする)
Bでそれを取り込む。

2)
BにHTTPServerを立てる

3)
AからBにHTTPプロトコルでアクセスする

4)
AからBにHTTPプロトコルでファイルを送信する

ここまでできればあとは何とでもなるわね。


私ならわざわざ転送を実装せずに
ファイル転送ソフトの導入を提案するけど。


> サーバが違うし
違うからデータ転送にHTTPを使うんだと思うけど。
同じサーバ内ならコピーでいいじゃない。

> スタンダードなやり方
あなたの行っているのは
http://~/xx?key1=value1&key2=value2
という感じでキーとバリューで送ると言っているのよね?
そうじゃなくて
普通にWebページでファイルのアップロードってしたことないかしら?
それをすれば良いだけよ。
この方法もスタンダードよ。
逆に、ファイルダウンロードをしたことないかしら?
数百MBとかのダウンロードもあるわよね。
これらはHTTPで行われているの。
どお?HTTPで大量データの転送なんて珍しい話じゃないでしょ?

手順

1)
Aからデータを抽出して
(例えばCSVファイルかなんかにする)
Bでそれを取り込む。

2)
BにHTTPServerを立てる

3)
AからBにHTTPプロトコルでアクセスする

4)
AからBにHTTPプロトコルでファイルを送信する

ここまでできればあとは何とでもなるわね。


私ならわざわざ転送を実装せずに
ファイル転送ソフトの導入を提案するけど。


> サーバが違うし
違うからデータ転送にHTTPを使うんだと思うけど。
同じサーバ内ならコピーでいいじゃない。

> スタンダードなやり方
あなたの行っているのは
...続きを読む

QAndroid DBデータ確認方法について

こんばんわ。

Androidの勉強をしています。

現在、DBの使用法について勉強をしています。
サンプルをもとにプログラムを作ってDBへの保存は出来ました。
DDMSで確認済みです。

この作成したDBのデータ(中身)を確認したいのですが、どのようにしたらよいのでしょうか。

ネットを参考に「PupSQLite」を利用して確認しようと思いデスクトップへファイルの保存をしようとしたのですがエラーとなり保存ができず確認できませんでした。

他に確認する方法はありますでしょうか。
お手数ですが、アドバイスをお願いいたします。

Aベストアンサー

Androidでは、データベースはSQLiteを使っています。またデータベースファイルは、/data/data/(パッケージ名)/databasesというディレクトリに保管されています。ですから、PCでAndroidをマウントして、コマンドラインからsqliteを起動してデータベースファイルにアクセスしてみるのが一番手っ取り早いかと思います。

QDBから取得したデータの文字化け

Java初心者です。

(確認したい内容)

ServletからMySQLのデータを取得したResultSetの項目で、2バイト文字が文字化けしていました。
私自身で調査した結果、
str = new String(str.getBytes("ISO-8859-1"), "JISAutoDetect");
※str…文字化けしている項目
のコーディングで文字化けが解消されました。

しかし、この対応だと全ての2バイト文字に対して、このコーディングを入れなければなりません。
これはスタンダードなコーディングなんでしょうか?
それとも環境周りの設定一発で不要になるものなんでしょうか?

私自身の周りに先生がいないため、自分の書いてるコーディングに自信がありません。
ご意見よろしくお願いします。

(環境)
WinXP-Pro-SP1
j2sdk4.1.2_05
Tomcat4.1.24
Eclipse2.1.3
MySQL4.1.7

Aベストアンサー

MySQLのバージョンあわせてませんでした。
すみません。

>必ずUTF8経由での文字変換していてそのマッピングがSJISとEUCだけだから
>一部文字列が通らない
>サーバーもクライアントもUTF8設定ならキャラクタ変換が起こらないので
>クライアント側であらためて好きな文字コードに変換するしか今のところない

というように2バイト文字の扱いが変化しているようです。

おそらくダウングレードするか、マイナーバージョンアップするのを待つと直ると思いますが、
クラス設計をすることによって回避できます。
つまりResultSetインターフェースを実装したカスタムResultSetを作成するとビジネスロジックを変化させることなく、文字化けやその他の低レベル層での環境の違いをResultSetで吸収できます。
いいかえてみるならば、JDBCドライバをカスタム化するといってもいいでしょうか。

もちろんResultSetはStatementオブジェクトから取得されますから、Statementオブジェクトもカスタム化します。

コネクション周りは大手ベンダーはすべてカスタム化して、フレームワークに埋めこんでますので、一度コネクション周りを作ってみるのもいいかもしれません。

私も製品としてフレームワークとコネクション周りを作成しましたが、相当便利になります。

MySQLのバージョンあわせてませんでした。
すみません。

>必ずUTF8経由での文字変換していてそのマッピングがSJISとEUCだけだから
>一部文字列が通らない
>サーバーもクライアントもUTF8設定ならキャラクタ変換が起こらないので
>クライアント側であらためて好きな文字コードに変換するしか今のところない

というように2バイト文字の扱いが変化しているようです。

おそらくダウングレードするか、マイナーバージョンアップするのを待つと直ると思いますが、
クラス設計をすることによって回避で...続きを読む


人気Q&Aランキング

おすすめ情報