質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

Q&A

1回答

2190閲覧

jspでinputタグのtype=fileで指定したファイルをblob型でDBに登録し、pdf形式で出力したいのですがうまくいきません。

papito061212

総合スコア0

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

ファイルI/O

ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。

0グッド

1クリップ

投稿2021/01/06 16:53

編集2021/01/07 02:57

製造初心者です。今、現場で、言語:java、db:oracle12cでDB接続はjdbcManagerで
ファイルアップロード、ダウンロード機能を作成しています。
やりたいこと
jspでinputタグのtype=fileで指定したファイルをblob型でDBに登録し、pdf形式で出力時は、ダウンロードバーを表示し、PDFを
出力したいのですが、以下、問題が発生しています。

①セキュリティの問題で、ファイルのフルパスを取得することができません。
フルパスを取得する方法、または、ほかにいい方法はありませんでしょうか。
②blobデータを取得し、pdf出力を行いたいのですが、以下、処理では、うまく出力しません。
解決方法などご教示いただけないでしょうか。
よろしくお願いいたします。

java

1------DB登録部分------ 2File file = new File("");//①ファイルのフルパスが取得できない。 3FileInputStream is = new FileInputStream(file); 4ByteArrayOutputStream baos = new ByteArrayOutputStream(); 5BufferedOutputStream os = new BufferedOutputStream(baos); 6int c; 7try{ 8 while((c = is.read()) != -1){ 9 os.write(c); 10 } 11 }finally { 12 if (os != null) { 13 os.flush(); 14 is.close(); 15 } 16 } 17//エンティティクラスにセット 18useConMst.conFile = baos.toByteArray(); 19 20//jdbcmanagerでDBにアクセス(登録)を行う。 21int relt = jdbcManager.insert().execute(); 22 23------PDFファイルダウンロード部分------ 24//Blobデータを取得 25List<UseConMst> results = jdbcManager.selectBySql( 26 UseConMst.class, sel.toString()).getResultList(); 27 28 29if(results == null && results.seze() <= 0){ 30//エラー時内容省略 31} 32 33InputStream in = null; 34ByteArrayOutputStream out = null; 35OutputStream outStram = null; 36BufferedOutputStream os = null; 37 38try{ 39 in = new ByteArrayInputStream(results.get(0).conFile); 40 out = new ByteArrayOutputStream (); 41 os = new BufferedOutputStream (out); 42 int cnt; 43 While((cnt = in.read()) != -1){ 44 os.write(cnt); 45 } 46 outStram = response.getOutputStream(); 47 outStram.write(out.toByteArray()); 48 49 String pdfFile = "pdffile.pdf"; 50 51 PesponseUtil.download( pdfFile ,out.toByteArray()); 52 53‥‥‥‥

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/06 19:24

ソースコードが読みづらいので質問を編集し、<code>をクリックしたら表示されるバッククオートで囲まれた部分に貼ってください。
papito061212

2021/01/07 04:18

上記の通り、編集致しました。 ご回答宜しくお願い致します。
guest

回答1

0

ファイルのパスを指定しないとis.read()java.io.FileNotFoundExceptionが発生するはずなんですが・・・上記のソース、動いてるんですよね?

投稿2021/01/07 03:56

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papito061212

2021/01/07 04:18 編集

回答ありがとうございます。 ファイルのパスは現在固定のパスをベタで設定していて、 DB登録できるところまでは確認しています。 ただ、FormFileのフルパスが取得できなくて困っています。
退会済みユーザー

退会済みユーザー

2021/01/07 05:15

うーん・・・。 「①セキュリティの問題で、ファイルのフルパスを取得することができません。」とのことですが、どの程度の情報が入手可能なのでしょうか。 ファイルが格納されているフォルダーのフルパスがわかれば、該当フォルダー内のファイル名一覧を取得できますが・・・それも無理・・・ですよね?
papito061212

2021/01/07 06:07 編集

デスクトップ上にあるファイルをアップロードしたいのですが、 inputタグのtype='file'のvalueプロパティへのアクセスには、セキュリティ上の理由により制約が設けられていてクライアントでは以下のようなパスしか取得できません。 C:\fakepath\testmail.pdf また、サーバー側で、getAbsolutePath()で絶対パスを取得しようとしたら、全然違う以下のパスが取得されます。 C:\Apache Software Foundation\testmail.pdf ほかに方法はありますでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問