ファイルのダウンロード
一般に、HTTP GET / POST要求に対するサーバーの応答データがブラウザが解釈できない形式の場合、ブラウザは添付ファイルのようにターゲットをダウンロードします。
たとえば、Anchor(a)タグに設定されたハイパーリンクを介してダウンロードされたデータがブラウザが解釈できるjpgファイルである場合、新しいウィンドウ(またはタブ)または現在のウィンドウに画像が表示されますが、それとは異なりzipファイルの場合 には通常、すぐにダウンロードを実行します。 jpgファイルのようにブラウザが解釈できるファイルをブラウザに表示せずにディスクに直接ダウンロードするには、ブラウザの独自の機能(コンテキストメニュー - 別の名前で保存)に依存するか、サーバーからブラウザに強制的にダウンロードする応答ヘッダー 乗せなければならない。 HTML5には対象形式(MIME)に関係なく強制的にファイルをダウンロードするようにする属性が新たに追加されたが、すべてのブラウザでサポート(2016年初め基準)しておらず、純粋にクライアント設定だけでファイルをダウンロードできない。
DEXTUploadJK製品は、サーバーのファイルまたはファイルではなく、データをブラウザの解釈なしに添付ファイルの形式で直接ダウンロードできるように処理する。
# ファイルパスをそのまま公開する場合 <a href="http://domain/path/music/Beethoven/Moonlight.mp3">Beethoven Moonlight Sonata</a> # download.doパスを使用して物理ファイルのパスを公開せずにダウンロードする場合 <a href="http://domain/path/download.do?key=12345">Beethoven Moonlight Sonata</a>
一般に、DEXTUploadJK製品を使用してダウンロードを行うことは、ターゲットファイルのパスを隠蔽したり、ターゲットファイルのパスがWebに公開されていない環境の場合です。 したがって、ファイルをダウンロードするには、ファイルをダウンロードできるJSPページまたはサーブレットを提供する必要があります
- Servet/JSP 環境
-
ファイルをダウンロードするにはFileDownloadクラスを使用してください。
public class DownloadServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("UTF-8"); try { String key = request.getParameter("key");ライセンス注意事項 // keyに対応するファイルのパスを取得します。 File target = new File("ファイルパス"); FileDownload fileDownload = new FileDownload(); fileDownload.download(request, response, target, "ダウンロード時に使用するファイル名", "application/octet-stream", false); } catch (Exception e) { throw new ServletException(e); } } }ファイルをダウンロードするとき、クライアントはGETではなくPOSTで要求することをお勧めしません。 ファイルのダウンロードは、クライアントのデータをサーバーに送信して状態を更新することが目的ではないためです。 さらに、Java Webアプリケーション環境では、バイナリデータを取得したい場合は、JSPページではなくサーブレットを使用することをお勧めします。 JSPページの場合、開発者の間違いにより、ページに含まれているタグがダウンロードデータにまとめて送信される可能性があるためです。 もちろん、ページに指示子を除いた残りを要素をすべて消去すればよいが、開発者の間違いによって空白文字列のような部分が残ることがあるため、問題が発生する可能性が高い。 したがって、サーブレットを直接定義して使用することをお勧めします。
- Spring MVCまたはSpring Boot環境
-
Spring環境からファイルをダウンロードするためにJKFileDownloadView クラスを提供します。
@Controller public class DownloadController { @RequestMapping(value = "/download.do", method = RequestMethod.GET) public ModelAndView download(@RequestParam(value = "key") String key) { // keyに対応するファイルのパスを取得します。 File target = new File("ファイルパス"); // ファイルをダウンロードするためにJKFileDownloadViewオブジェクトを作成します。 JKFileDownloadView view = new JKFileDownloadView(); view.setFile(target); view.setFilename("ダウンロード時に使用するファイル名"); view.setMime("application/octet-stream"); view.setCharsetName("UTF-8"); // ダウンロード操作を処理するビューオブジェクトを返します。 return new ModelAndView(view); } }