🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Q&A

1回答

4638閲覧

サーブレットを用いたpdfファイルのダウンロード機能について

gagagagaga

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

0グッド

0クリップ

投稿2020/12/19 03:55

編集2020/12/19 04:40

データベースにアップロードしたpdfファイルを投稿した項目(ID)のページごとにダウンロードできるようにしたい

サーブレットを用いてpdfファイル管理アプリを制作しております。
pdfファイルをアップロードすることはできたのですが、投稿した項目のページごとにファイルをダウンロードできるようにしたいです。

発生している問題・エラーメッセージ

現在の仕様だと、どのページでも同じpdfファイルのダウンロードになってしまいます。

Java

1@WebServlet("/reports/download") 2public class ReportsDownloadServlet extends HttpServlet { 3 private static final long serialVersionUID = 1L; 4 5 public ReportsDownloadServlet() { 6 super(); 7 } 8 9 protected void doPost(HttpServletRequest request, HttpServletResponse response) 10 throws ServletException, IOException { 11 OutputStream out = null; 12 InputStream in = null; 13 try { 14 File file = new File("/Applications/Eclipse_4.6.3.app/Contents/workspace/academic_management/WebContent/WEB-INF/new/ファイル名.pdf"); 15 response.setContentType("application/pdf"); 16 response.setHeader("Content-disposition", "attachment; filename="+file.getName()); 17 in = new FileInputStream(file); 18 out = response.getOutputStream(); 19 byte[] buff = new byte[1024]; 20 int len = 0; 21 while ((len = in.read(buff, 0, buff.length)) != -1) { 22 out.write(buff, 0, len); 23 } 24 } catch (Exception e){ 25 e.printStackTrace(); 26 } 27 finally { 28 29 if (in != null) { 30 try { 31 in.close(); 32 } catch (IOException e) { 33 } 34 } 35 if (out != null) { 36 try { 37 out.close(); 38 } catch (IOException e) { 39 } 40 } 41 } 42 } 43}

Java

1package models; 2 3import java.sql.Timestamp; 4 5import javax.persistence.Column; 6import javax.persistence.Entity; 7import javax.persistence.GeneratedValue; 8import javax.persistence.GenerationType; 9import javax.persistence.Id; 10import javax.persistence.NamedQueries; 11import javax.persistence.NamedQuery; 12import javax.persistence.Table; 13 14@Table(name = "reports") 15@NamedQueries({ 16 @NamedQuery( 17 name = "getAllReports", 18 query = "SELECT r FROM Report AS r ORDER BY r.id DESC" 19 ), 20 @NamedQuery( 21 name = "getReportsCount", 22 query = "SELECT COUNT(r) FROM Report AS r" 23 ), 24 @NamedQuery( 25 name = "checkRegisteredName", 26 query = "SELECT COUNT(r) FROM Report AS r WHERE r.name = :name" 27 ), 28}) 29@Entity 30public class Report { 31 @Id 32 @Column(name = "id") 33 @GeneratedValue(strategy = GenerationType.IDENTITY) 34 private Integer id; 35 36 @Column(name = "name", nullable = false, unique = true) 37 private String name; 38 39 @Column(name = "author", nullable = false) 40 private String author; 41 42 @Column(name = "year", nullable = false) 43 private String year; 44 45 @Column(name = "magazine", nullable = false) 46 private String magazine; 47 48 @Column(name = "created_at", nullable = false) 49 private Timestamp created_at; 50 51 @Column(name = "department", nullable = false) 52 private Integer department; 53 54 // 55 @Column(name = "data", nullable = false) 56 private String data; 57 58 @Column(name = "updated_at", nullable = false) 59 private Timestamp updated_at; 60 61 @Column(name = "delete_flag", nullable = false) 62 private Integer delete_flag; 63 64 public Integer getId() { 65 return id; 66 } 67 68 public void setId(Integer id) { 69 this.id = id; 70 } 71 72 public String getName() { 73 return name; 74 } 75 76 public void setName(String name) { 77 this.name = name; 78 } 79 80 public String getAuthor() { 81 return author; 82 } 83 84 public void setAuthor(String author) { 85 this.author = author; 86 } 87 88 public String getYear() { 89 return year; 90 } 91 92 public void setYear(String year) { 93 this.year = year; 94 } 95 96 public String getMagazine() { 97 return magazine; 98 } 99 100 public void setMagazine(String magazine) { 101 this.magazine = magazine; 102 } 103 104 public Integer getDepartment() { 105 return department; 106 } 107 108 public void setDepartment(Integer department) { 109 this.department = department; 110 } 111 112 public String getData() { 113 return data; 114 } 115 116 public void setData(String data) { 117 this.data = data; 118 } 119 120 public Timestamp getCreated_at() { 121 return created_at; 122 } 123 124 public void setCreated_at(Timestamp created_at) { 125 this.created_at = created_at; 126 } 127 128 public Timestamp getUpdated_at() { 129 return updated_at; 130 } 131 132 public void setUpdated_at(Timestamp updated_at) { 133 this.updated_at = updated_at; 134 } 135 136 public Integer getDelete_flag() { 137 return delete_flag; 138 } 139 140 public void setDelete_flag(Integer delete_flag) { 141 this.delete_flag = delete_flag; 142 } 143}

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2020/12/19 04:34

どこにも「データベースから取得する処理」がないようですが。。 テーブル定義も含めてご提示ください。
dodox86

2020/12/19 04:39

投稿した項目のIDとそれをどこに登録したかは質問者さんしか知らないので、答えようがないと思いますよ。項目IDをどこで管理してどうファイルと結び付けているか、設計の問題です。
gagagagaga

2020/12/19 04:42

m.ts10806様,dodox86様修正依頼ありがとうございます。まだまだ勉強中の身であり大変申し訳ございません。
m.ts10806

2020/12/19 04:43

保存ができるなら出力できるはずですが、どのように作ったのでしょう。
gagagagaga

2020/12/19 04:50

JSPにて <form name="dl" method="POST" action="<c:url value='/reports/download' />">  <a href="#" onClick="dl.submit()"> <c:out value="${report.data}">   </c:out> </a> </form> と記述し、ダウンロードできる状態にはなっております。
guest

回答1

0

現在の仕様だと、どのページでも同じpdfファイルのダウンロードになってしまいます。

それは、

java

1 File file = new File("/Applications/Eclipse_4.6.3.app/ 2Contents/workspace/academic_management/WebContent/ 3WEB-INF/new/ファイル名.pdf");

の部分で、常に同じ.../new/ファイル名.pdf"というpdfファイルの内容を読み込んでいるからなのでは?

投稿2020/12/19 04:25

shiketa

総合スコア4054

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

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

gagagagaga

2020/12/19 04:31

shiketa様、回答頂きありがとうございます。一度投稿したpdfファイルをIDごとに読み込んでダウンロードする機能は可能でしょうか。また、どのような記述をすればよいでしょうか。ご教授いただきたいです。よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問