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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

3回答

6277閲覧

1操作で複数のファイルをダウンロードorフォルダ作成はできますか

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2018/10/17 09:18

編集2022/01/12 10:55

かなり多くのファイルを選択ダウンロードする機能が必要なのですが
サーバーでZIPを動的に作るとサーバーのメモリがあふれそうなので
1操作でシリアライズしてダウンロードできる方法をさがしています

ブラウザ上の操作でローカルに特定のフォルダを作成してその中に複数のファイルをダウンロードする
(させる)機能をサーバーで提供することはできるでしょうか?

追記

回答いただいてありがとうございます
ただ複数ダウンロードはブラウザによってはできる可能性があっても
フォルダ作成が無理なのであればいずれにしろ別の方法を考えないといけないので
メモリを使わずにシリアライズしてZIPを作る方向で考えようかと思います

もしフォルダ作成の件が解決するのであれば教えていただきたいです

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

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

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

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

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

x_x

2018/10/17 09:30

サーバーのメモリをひっ迫するなら、クライアント側も同じことになるのでは? 一つずつダウンロードするのではだめなのでしょうか?
m.ts10806

2018/10/17 09:41

ローカルの保存先を指定したりフォルダ作ったりはあくまでブラウザの保存ダイアログ後、ユーザーがやることでシステムからはセキュリティ上できませんけども。
退会済みユーザー

退会済みユーザー

2018/10/17 10:38

>x_xさん ディスクとメモリでは要求量が違うと思います。 あとクライアントの要求でまとめてやりたいといわれてるので…  >mts10806さん やはりできないですよね… ZIPでなんとかストリームでおくれるようにすることにします
guest

回答3

0

ローカルの保存先をスクリプト側から操作することは難しいですが、ユーザーがブラウザで設定しているダウンロードホルダにダウンロードするという用途に限って言えば、可能です。

phpで、下記のような、ファイル名(パス含む)を受ければ、ダウンロードする仕組みを作って、それに対してjavascriptから、XMLHttpRequest();で、ファイル名(パス含む)を連続投入してやればできます。

php

1<?php 2$filename=$_GET['filename']; 3 4if(isset($_GET['filename'])){ 5 header('Content-Type: application/octet-stream'); 6 header('Content-Disposition: attachment; filename='.$filename.''); 7 header('Content-Length: '.filesize($filename)); 8 readfile($filename); 9} 10?>

ただ、1000以上のファイルを、、、一回のクリックでダウンロードしたように見せる。ギミックが必要なのかどうかは、依頼者さんともう一度相談された方が良いのではと思います。

1000以上のファイルのリスト(2000?とか3000?)から、ユーザーが必要なものを選択する。という動作があるのでしたら、上でyambejpさんが説明されている方法で選んだ時点でダウンロードするのと、なんら変わらないような気がします。最後にまとめてダウンロードするボタンをクリックする手間が、もうワンクリックですが増えることになりますし、1000回分のリクエストを待つというユーザー側の時間的コストも増えますし、サーバー側も連続してリクエストを受けることになります。


追記です。

yambejpさんの説明で、aタグのdownload属性でダウンロードできるということを知りましたので、javascriptだけで作ってみました。

IEは、download属性が効かないので無理みたいです。(持ってないのでわかりません。w)

ただ、ダウンロード時にダイアログが出るか出ないかは、ブラウザに設定があるみたいです。

下記、multi_download()を、フォームから値を拾って、ぶん回すなりの工夫をすればよろしいのではと思います。

html

1<!doctype html> 2<html lang="ja"> 3<head> 4 <meta charset="utf-8"> 5 <title>Multi Download Sample</title> 6 <script> 7 function multi_download() { 8 download("1.jpg"); 9 download("2.jpg"); 10 download("3.jpg"); 11 download("4.jpg"); 12 download("5.jpg"); 13 } 14 function download(name) { 15 // chrome,firefox ただし、毎回確認ダイアログが出るかどうかはブラウザの設定による。 16 var a = document.createElement('a'); 17 a.download = name; 18 a.href = name; 19 document.body.appendChild(a); 20 a.click(); 21 document.body.removeChild(a); 22 } 23 </script> 24</head> 25<body> 26<button type="button" onclick="multi_download();">マルチダウンロード</button> 27</body> 28</html>

投稿2018/10/17 13:46

編集2018/10/17 15:30
colling

総合スコア798

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

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

colling

2018/10/17 16:06

サンプルを投稿しておいて言うのもアレですが、やはり、このようなギミックが必要なのか?という疑問が残ります、、。 選択時にダウンロードしてしまう方がユーザー側もサーバ側も負担も少ないと思いますし、 ワンボタンの実装にするのであれば、事前にダウンロードされるファイル数をお知らせするなり、総容量をお知らせするなり、是非ともユーザーに優しい実装になるよう心がけるべきだと思います。 自分でやってみて、5つぐらいなら「おおっw」って感じですが、1000個となるとちょっとゾッとします。
guest

0

無圧縮ZIP形式にして容量とヘッダは事前計算にすればファイル内容に由来するメモリ消費はほぼ0でいけるんじゃないですかね?

投稿2018/10/18 00:43

macof

総合スコア83

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

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

0

HTML

1<a href="hoge.dat" download="hoge.dat">hoge</a>

をつくって、クリックさせればよいでしょう

投稿2018/10/17 10:49

yambejp

総合スコア114505

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

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

退会済みユーザー

退会済みユーザー

2018/10/17 10:57

複数ファイル(選択でどのファイルが選ばれるかは可変)で ファイル数が最大で1000以上になるので1操作でDLしたいのです
yambejp

2018/10/17 11:01

1000以上クリックしてダイアログボックス出すのではダメですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問