今回は、「添付ファイルの扱い(4)―バイナリファイルダウンロード、アップロード―」です。
バイナリファイルのダウンロード、アップロードを見てみましょう。
ここでは、画像ファイルを例にしています。
■動画はこちら
■動画で使用しているソースコード
ダウンロード
サーブレット(Sv18.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package yurufuwa.prog.sample; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.IOException; import jakarta.servlet.ServletException; import jakarta.servlet.ServletOutputStream; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; public class Sv18 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //ダウンロードするファイル String fileDir = "r:\\download\\"; String fileName = "logo.png"; //HTTPヘッダの設定 resp.setContentType("image/png"); resp.setHeader("Content-Disposition", "attachment;filename=\"" + fileName +"\""); //ダウンロード処理 try(FileInputStream fis = new FileInputStream(fileDir + fileName); BufferedInputStream bis = new BufferedInputStream(fis); ServletOutputStream sos = resp.getOutputStream(); BufferedOutputStream bos = new BufferedOutputStream(sos)) { byte[] buff = new byte[4096]; int len = -1; while( (len = bis.read(buff)) != -1 ) { bos.write(buff, 0, len); } bos.flush(); } } } |
アップロード
サーブレット(Sv15.java)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | package yurufuwa.prog.sample; import java.io.IOException; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.MultipartConfig; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.Part; @MultipartConfig public class Sv15 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //パート(file)の取得 Part filePart = request.getPart("txtFile"); //ファイル名を取得 String fileName = filePart.getSubmittedFileName(); //ファイルの保存 filePart.write("r:\\upload\\" + fileName); //読み込んだ内容を出力 response.getWriter() .append("<html><head><meta charset=\"utf-8\"></head><body>") .append("<h3>ファイルを受信しました。</h3>") .append("ファイル名:") .append(fileName) .append("</body></html>"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <form action="./sv15" method="post" enctype="multipart/form-data"> <input type="file" name="txtFile" /><br /> <br /> <input type="submit" value="送信" /> </form> </body> </html> |
共通
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://jakarta.ee/xml/ns/jakartaee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd" id="WebApp_ID" version="5.0"> <display-name>testWeb</display-name> <servlet> <description></description> <display-name>Sv18</display-name> <servlet-name>Sv18</servlet-name> <servlet-class>yurufuwa.prog.sample.Sv18</servlet-class> </servlet> <servlet> <description></description> <display-name>Sv15</display-name> <servlet-name>Sv15</servlet-name> <servlet-class>yurufuwa.prog.sample.Sv15</servlet-class> </servlet> <servlet-mapping> <servlet-name>Sv18</servlet-name> <url-pattern>/sv18</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Sv15</servlet-name> <url-pattern>/sv15</url-pattern> </servlet-mapping> </web-app> |