Webサイト制作初心者用質問スレ part249
■ このスレッドは過去ログ倉庫に格納されています
初心者だろうが誰だろうが、
まず >>>■ 検索してから ■<<< 質問すること
ネタ・煽り・自演・荒らしは完全放置
【質問時の注意】
1. 質問する前に >>2 にも目を通すこと
2. メール欄に何も入れないことを推奨 (IDを出して騙りを防止するため)
3. 質問者が返信する際は「最初に質問したレス番号」を名前欄に入れること
4. ブログについてはブログ板で質問すること
●ブログ板 http://mevius.5ch.net/blog/
5. SEO、アドセンス、検索サイトに登録しても検索結果に引っかからないといったことは SEO関連スレで質問すること
http://find.5ch.net/search?q=seo
6. アクセス解析については該当スレで質問すること
http://find.5ch.net/search?q=%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E8%A7%A3%E6%9E%90
7. 製作ソフト(Dreamweaver DW、ホームページビルダー、等)を使用した場合の質問は該当スレで質問すること
8. CGI、PHP, Perl, Ruby 等のプログラミング関連や CMS, Wiki は Webprog板、またはこの板の該当スレで質問すること
●WEBプログラミング板 http://medaka.5ch.net/php/
9. JavaScript はこの板の該当スレで質問すること
10. 画像作成ソフト(Photoshop 、Illustrator、等)については該当スレで質問すること
11. HTML, CSS, CGI, 制作ソフトなどのどんな本を買えばいい?といったことは書籍についての質問スレで質問すること
http://find.5ch.net/search?q=%E5%BD%B9%E3%81%AB%E7%AB%8B%E3%81%A4%E6%9B%B8%E7%B1%8D%E3%81%AF
12. 質問内容を吟味して、正しい日本語で第三者が読んでも分かるように質問を書くこと
13. 間違った回答をする人もいることに注意
【前スレ】
Webサイト制作初心者用質問スレ part248
http://mevius.5ch.net/test/read.cgi/hp/1494150188/ 要件定義しないとなぁ
>>678みたいなのがあればタイムアウトなんて絶対に起きる
自社の管理いステム限定の処理なら起きないだろうという事は推測できるけど
前日で決まってる+数パターンなら夜中に作っておくという処理も考えられる 要はその間に通信をし続ければいいんですよね
いくら巨大なファイルをダイヤル回線みたいな細い回線でダウンロードし続けても
進捗がある限りタイムアウトっておきないじゃないですか
ZIPをストリームで送る
処理中にレスポンスをストリームで少しずつ返してそれをJS側で進捗とみなす
非同期にしてレスポンスはすぐ返し、ajax で polling して進捗を返すAPIを追加する
のどれかができれば可能だとは思うんですが
どれもが Rails + IE っていう制約だとなかなかうまくいかなくて… つーかもう質問内容が初心者スレの内容でもないし
>>1 よんで webprog 板いったほうがいいんじゃね
ここはどっちかっていうと HTML CSS みたいなマークアップ関連の質問するところな気がする
まあRailsスレなんて人いるか知らんけど IEはまじでjavascript触る人にとっては癌だよなー
IE対応ってだけでjavascriptの工数倍とってもいいぐらいだわ
ES6使えないだけでも糞すぎ >>696
そのためにbabelがある。babelがない時代ならともかく
今それを言ったら、技術力低いってバレるぞ IEはjsじゃないからな
jsの工程多いなら別料金取れる >>697
だったら答えてやれば?
>IEでTransfer-Encoding: chunked受信する方法 ajax関係はむしろもっと低レベルなAPIで仕様を統一してくれないとどうしようもない いまの話題でBabelとか言い出しちゃうほうが技術力低すぎ
ブラウザのHTTPハンドリングの内部実装やプロトコルのはなしなんだからbabelじゃ何も解決できん
ms-streamとか変なもん作ってるから… >>697
Babelってただの互換性吸収変換器だしなー
変換先のJSがIEで不可能なことはそもそも不可能なんだよなー IE11のサポートは2025年10月までだからがんばれ
サポートって言っても何もしてないがw >>699
それはJavaScriptの話じゃない。
勝手に話をすり替えんな >>696
> IEはまじでjavascript触る人にとっては癌だよなー
> IE対応ってだけでjavascriptの工数倍とってもいいぐらいだわ
> ES6使えないだけでも糞すぎ
JavaScriptの話だよな?
どうもIEの話とごっちゃにしてるバカが多いけど、
JavaScriptの問題。特にES6はBabelで解決できるよ jsだろうとなんだろうとIEが糞って事には変わりないよ 質問者はIEでストリームレスポンスできる方法きいてるのにアスペかこいつ
質問と無関係な雑談したいならスレチ >>696は質問者(?)じゃないんですが?
勝手に別の人への回答にするなよ >>696にレスししてるのに、
勝手に別の人への質問にすり替え、
解答が違うとか、なにそれwww どう見ても質問じゃないだろ
そのレスのどこでなにを質問してんだ
アスペな上に日本語不自由か fetchがIEで使えなかった
→IEくそだよなー
→Babel 使え ← は?
マウントレスするならはなしのながれぐらいつかめるようになりましょう >>710
だから>>696にレスしてるだけだっつーの
お前がアスペだろw 初回のレスでいきなりマウントレスするようなやうにかまうから まわりでBabelなんて使ってるやつ知らんのだが
学習コスト導入コスト変換コストがかかるだけでも工数が増えるしそれだけでも糞だろ
保守でBabelが使えることも条件になるしな >>692
WinJS.xhs ってのがある
XMLHttpRequest のラッパーになってて
ストリーム受信含むいろいろなことができるらしい
自分は使ったことはないんだけど クソ雑魚ばっかりwww
>>692
> それも考えたのですがRailsで非同期処理するのが思いの外大変で…
> 別にサーバーをたてないと非同期処理ができないみたいで…
Railsで非同期するならActiveJob使えばいいやん?
普通にフレームワークに搭載されてる
>>675
別にRailsでZIPをストリームで返すことはできるけど、
それで本当に良いのかって話がある。
S3を使っているなら、Railsアプリを経由せずに、直接S3からダウンロードしたほうが良いからだ。
AWSは詳しくないが、同一リージョンならEC2(Railsサーバー)と
EC2の通信量は無料じゃないか?ならZIPもS3に作成し、
そこから直接ダウンロードしてもらったほうがコストも速度も良くなるだろう
その時のダウンロードURLについてはSigned URLが重要になってくるな
RailsでZIPをストリームで作ることもそんなに大変とは思わないが、
ダウンロードが始まるまでに数分かかるというのなら、ページ移動してしまう可能性もある。
だから一つのセッションとかに頼るのではなくて、非同期でZIP作成して
ZIPの作成の完了をAjaxで定期的に問い合わせたりすればいいだろう
そのときに、どこまで処理が済んだかを記録しておけば、ZIP作成の進捗状況を出すこともできる。
ダウンロード・アップロードも何処までデータを送信したか、受信したかを記録しておけば
(ダウンロード・アップロードとは別のセッションで)Ajaxを使って通知することは可能
S3から直接ダウンロード・アップロードさせる場合はIEでダウンロード・アップロードの
進捗状況を表示するのは難しいが、(ZIP作成の進捗状況通知ならできる)
Railsアプリを通すという前提であれば、IEでもできるぞ。 >>677
> これがタイムアウトせずに IE 含めたモダンブラウザで実現できる方法が知りたいのです
可能
前提として時間がかかる処理は非同期で行う。これが鉄則。
Railsで非同期処理をするならActiveJobなどを使えば良い
S3ということだからAWSを使ってるのだろうけど、AWSの
非同期処理を行えるサービス(詳しくは知らない)を使うのもいいだろうな
まずRailsアプリはダウンロードのリクエストがきたら、それを非同期で
処理するようにしてクライアントにはすぐにレスポンスを返す。
サーバー側では非同期でゆっくりとZIP作成でもすればよい。
作成したZIPはS3に置いたほうがコストとパフォーマンスの両面で良いだろう。
スケールさせる場合(マシンの台数を増やした場合)同一のインスタンスに
アクセスするとは限らないという問題もある。ローカルディスクに保存してると、
作成したサーバーとは別のサーバーに接続したときにファイルが見つからない
サーバーが1台しか建てないっていうのなら、ローカルにZIPを作成してもいいけど。
そしてZIP作成の進捗状況はAjaxで定期的に監視すればよい。IEでも対応可能。
ダウンロードする場合のおすすめはS3に置いたZIPファイルを直接ダウンロード
してもらう方法だが、Railsアプリを経由してダウンロードする方法もあるにはある
質問からすれば、ZIPを返すまでの待ち時間の解決がメインみたいなので
ダウンロードの進捗状況までは知る必要はなさそうだが、やろうと思えば、
何処まで送信したかを記録することで、Ajaxで通知することは可能 >>694
RailsアプリからZIPをストリームで送るということをやるなら、
別にJavaScript側でいろいろやる必要はない。JavaScriptもAjaxも何も要らない
やり方は、単にRailsアプリでメモリ内にZIPデータを作って返すだけだぞ
必要なのは、それができるライブラリを探すだけだろうな
あと「進捗がある限りタイムアウトっておきないじゃないですか」の解決策として
「非同期にしてレスポンスはすぐ返し」と書いているようだが、
Ajaxはすぐにレスポンスを返して通信を終了しているわけで、
「進捗がある限りタイムアウトが起きない」のとは関係ない話になってるぞ
Fetch APIなどを使って細かいチャンクごとにデータを受け取ってローカルで保存する方法はあるが
それを使わなくてもIEでも「進捗がある限りタイムアウトっておきない」だろ?
ゆっくりデータを返すのに必要なのはサーバーの対応だけで、IEだからって話にはなってない。 ついでに、Fetch APIなどを使って細かいチャンクごとにデータを受け取る方法だが、
つまりはTransfer-Encoding: chunkedに対応するってことだが、
これはChromeなどでJavaScriptを使って対応することは可能だが、
それはそれとしてだ、サーバー側での対応も必要だぞ。
ダウンロードのためのリクエストが細かく送られてくる、それも一つのセッションではなく
チャンクごとに別々のセッションでリクエストが飛んでくるので、Rails側でそれに対応して
細かいチャンク毎にデータを返すように作らないといけない
だからZIPデータを(メモリに)作りながら、データを返すっていうのは難しいんだよ。
なぜならZIPを作成しているセッションとは別のセッションで次のチャンクの要求が来るからね
ちなみにS3はこの細かいチャンクごとのダウンロードに対応しているから、
S3からFetchAPIなどでダウンロードする方法の方が、サーバー側でチャンクごとのダウンロードを
実装しなくてすむ。つまりは、S3のCSVファイルからZIPを作ってS3に置くって話に戻るわけだなw 俺は>>696にレスしてるだけだっていうのに、
本来の質問者に対してレスしろとか言われたから、
レスしてやったぜwww
途中参加で駆け足で思いつくまま書いたからわかりくいだろう。
続けてやるから、質問を続けるが良い 692 です
>>716
ありがとうございます
これから調べて試してみようと思います >>717
丁寧にありがとうございます
>Railsで非同期するならActiveJob使えばいいやん?
軽く調べてみたらコード自体は簡単にかけるんですけどそれを動くようにするのに
sidekiqとかredis?みたいなジョブサーバーを建てないといけないみたいで
サーバーをたてるとなるとリソースの問題やモニタリングやログ監視とかも必要になってきて
たかがダウンロードに進捗つけるのにそこまでしなきゃいけないものなのかなと…
>別にRailsでZIPをストリームで返すことはできる
何っていうジェムをつかえばいいんでしょう
ファイルを逐次追加はできても send_data send_file できるのは
zipが完成してからってジェムしかないんですよね
zip自体はエントリ単位でストリームに対応してるアルゴリズムらしいのですが
>ZIPもS3に作成し
できればファイルに残さずメモリ上で処理したいんですよね
ダウンロードはこれまでも何度かつけたことがあるんですがファイルを作ってリダイレクトだと
完了したあとダウンロードされないことがあるとサーバーにごみが残り続けるって問題があって…
>非同期でZIP作成してZIPの作成の完了をAjaxで定期的に問い合わせ
仰る方法で実現することはできると思うし多数のユーザからリクエストが来るならそうするべきですが
今回内向け管理画面でオペレーターがひとりって想定でコントローラを専有してOKなので
いちばんはじめに>>669で質問したように >>669 ができればコーディングもリソースも楽なんですよね…
非同期処理にしても忙しい処理してる最中にポーリングして進捗にうけこたえするのって無駄な気がするんです
それに比べればKeeo-Aliveで進捗をストリームで受け取ることさえできれば
サーバー側でタイミングや頻度もコントロールできますしね
結局IE上のajaxでレスポンスをストリーム受信することって無理なんでしょうか…
Chromeではfetchのreadablestreamをつかってダウンロード進捗が動いたのでサーバーからはflushできてるみたいなので
あとIEで送られてきたレスポンスをバッファせず受け取ることさえできればすべてが解決するんですが… > 完了したあとダウンロードされないことがあるとサーバーにごみが残り続けるって問題があって…
cronでも使って定期的に後片付けすればいいよ
> Chromeではfetchのreadablestreamをつかってダウンロード進捗が動いたのでサーバーからはflushできてるみたいなので
ZIPを作成するまでの待ち時間が問題なんじゃなかったのか?
fetchのreadablestreamはJavaScriptでのダウンロード中に画面更新ができるという話で、
ZIP作成までの待ち時間は別の話だし、そもそもJavaScriptでダウンロードするのではなく
ブラウザにダウンロードさせれば画面更新は行えるだろう?
本当にやりたいことは何? > >別にRailsでZIPをストリームで返すことはできる
> 何っていうジェムをつかえばいいんでしょう
知らん。でも原理的にはできるだろ?
データ作りながら出力するだけ
どうやってS3のCSVファイルを参照しているのか知らんが、
ファイルとして扱えるのなら、zipコマンドでファイルに
書き出すのではなく標準出力に書き出せばできるはず >>723
> いちばんはじめに>>669で質問したように >>669 ができればコーディングもリソースも楽なんですよね…
それが楽という理由がわからん。
ダウンロードボタンを押されてサーバーにリクエストが飛んで、
サーバーがZIP作成などの処理を実行中に、その進捗状況をデータベースや
ファイルに書き込んでおいて、Ajaxで進捗状況を監視するのも大差ない。
むしろその方がJavaScriptで受け取ったデータの最初の10文字を消して
CSVファイルを保存するよりも楽だろう そういやZIPを作成しつつストリームでデータ返すなら
最終的なZIPのサイズは不明だから、何%終わったとかは
出せないな。何バイト送信したっていうのなら出せるけど いるよな質問者が本当にやりたいことは何ひとつ答えずに
自分の経験でしか語れないやつ
わからないなら黙ってればいいのに
1回のリクエストレスポンスでIE以外ではすでに実現できてるっていってるのに
今更全く別の無駄だらけの方法を1からやれってバカすぎる
たかがダウンロードに進捗つけるのにジョブサーバーとかcronとか
こういうリソースのこと何もかんがえないやつにサーバーサイドやらせた結果障害だらけになるんだろうな sidekiqはまじでやめとけ
直接かかわったことはないけど昔sidekiqがメモリリーク起こして頻繁に落ちて
解決するまで何度も夜中におこされて再起動かける別チームのメンバーみてきた
つーか Railsってまじで別のジョブサーバーがないと並列リクエストうけられんの?
さすがにゴミすぎだろ
もうApache 上に直接おけばいいじゃん >>724
>cronでも使って定期的に後片付けすればいいよ
基本的にフロントエンドでサーバーサイドはコードをいじれるってだけで
インフラの知識がないのでコマンド叩くとか基本的に設定をいじるとかそれも一苦労なのです
>ZIPを作成するまでの待ち時間が問題なんじゃなかったのか?
そうです
>本当にやりたいことは何?
ダウンロード前のZIP作成中に進捗を表示したい
例えばファイルを1つZIPに追加するごとに全体何ファイル中何ファイル目という進捗をクライアント側に送りたい
>fetchのreadablestreamはJavaScriptでのダウンロード中に画面更新ができるという話
fetchは本当にダウンロード前に encoding:chuncked なデータをリアルタイムでうけとれるんです
Rails で render stream:true というオプションをつけるとchunkedデータを返せるみたいで
ZIP作成中にファイルを1つ追加するたびにresponse.stream.write("{progress:1})
みたいにかくとダウンロード開始前に chrome 側にレスポンスが流れてきます
でさいごに response.stream.write("{complete:zipbody1})をつけておくって
javascript 側で complete: をみたら残りをファイルコンテンツとみなして blob を作るという感じで実際に動いてます
$ajax や XMLHttpRequest では途中で受け取る方法がわからなかったんですが
fetch の readableStream というのを使うとうけとれてこれが IE だけ動きません
>>726 >それが楽という理由がわからん
サーバーサイドの経験の差なのかも
フロントエンドがメインでサーバーはviewとかSQLのやりとりを軽くさわれるぐらいなので
ジョブサーバーをたてるってだけでノウハウも何もなくなにをしたらわかりません
しかも非同期実行中の進捗をメインコントローラーに受け渡す方法もわからないし
進捗を聞きに来た相手が最初のリクエストした相手と同定する方法もわからないし
逆にいまの方法だとサーバー側は render stream: true と response.stream.witeをかくだけ
クライアント側は文字列として取り出しさえできればあとは何とでもなるので… fetch で IE 以外動いてるっていうなら fetch polyfill つかえばええんちゃうん?
https://github.com/github/fetch
CDNもあるから1行かくだけやで レベル高すぎて何いってるかさっぱりわからない
HTMLとCSSとwordpressしかつかえない俺からしたら別世界の話題 >>731
やってみたんですけどだめでした
undefined じゃなくなってエラーは出なくなったのでうまくいったかなと思ったのに
ttps://sbfl.net/blog/2018/05/26/javascript-streams-api/
ここを参考にjavascript側をかいてたんですが
1行目の
.then((response) => response.body.getReader())
がトリガーされずに無反応
IEだけなんでこんな特殊な動作するんでしょうか;;
>>716
http://vividcode.hatenablog.com/entry/ie10/xhr-ms-stream
ここを参考にコードかいてみたんですけど
res.msDetachStream()
が undefined
WinJS.xhr({ url: uri, responseType: "ms-stream" }).
っていう独自の responsetype 使うみたいなのでサーバー側もただ response.write するだけではだめなのかも
ただ検索しても ms-stream に関するドキュメントがぜんぜんでてこなくてよくわかりません…
結局今週も解決できず…
もうあきらめようかな… バカバカしい。
csvごとき、サーバーでgzipかかるだろうからそのまま落としても大した転送量にならないだろ。
csvのまま取ってきてクライアント側でjsZipでzipファイルにすりゃいいだけだろ。 >>734
なるほどです!
天才です
確かにそれならじぶんができる技術でできそうだし
タイムアウトもないし進捗処理も簡単につけられそうです
サーバー処理も大幅にかえなきゃいけないけど
現状手詰まりなので試してみたいと思います
ありがとうございます XMLHttpRequest って普通に途中のデータ拾えないっけ
res.readyState ==4 だけしかみてないなんてないよね?
readyState == 3 をみるんだよ ttps://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/dev-guides/hh673569(v=vs.85)
ちなみにこれの Comet streaming support のとこね
試したわけじゃないけど IE10 では普通に途中データうけとれるってかいてるんだけどなー >>736,737
わー! すごい! できました!
しかもコードもすごい短いしIEもChromeもUA分岐しなくても動くし最高です!!!
XMLHttpRequestでストリーム受け取るって記事がどこにもなくててっきりできないと思ってたんですが
readyStateの3がLoading中って意味だったんですね
fetchで作ったコードもほぼ流用できてサーバー側はなにひとつ変えずにすんだし
ほんとに助かりました
さすがプロの方すごいです
質問してよかったです >>739
>>737 さまですか 本当にありがとうございました
他にもリプいただけた方々ありがとうございました IEは能力自体は高いんだよ。
まだウェブに標準化という考えが乏しかった時代
IE6以外にまともなブラウザがなかった時代が長かったため、
それ以降の標準化への対応が遅れただけで、
搭載されている技術は10年先まで使える技術だったからな なぜIE以外のブラウザはcontent boxとかいうクソ仕様を採用したのか。 >>742
IEってデフォルトでborderboxなのか? IEが独自拡張なんじゃなくて、当時は標準そのものがなかった。
ボーダーをブロックの外につけるか中につけるかそういう仕様自体がなかった。
だからIEが間違いでも独自拡張なわけでもない。
IEの挙動(border box)の方が使い勝手が良かったが
他のブラウザはcontent boxの挙動で実装していた。作りやすかったんだろう。
この時はまだborder boxとかcontent boxなんて言葉はなかった
その後だよ。標準化の話が浮上したのは。IE嫌いのやつが
仕様を作ったのか、IEとは違う方が採用されてしまった。
そしてその数年後に、やっぱりIEの挙動のほうが便利だとわかって
挙動を変えられるようになった。このときにようやくborder boxと
content boxという言葉ができた。
今では細くデザインを調整する場合は、border boxにするのが常識となっている 作りやすかったのかなんなのか知らんがデザイン側からしたらcontent boxなんてキチガイ仕様以外の何物でもない 標準が間違っていた。(IEが正しかった)という例の一つやな
AjaxとかCanvasとか、当時は標準がなかったから仕方なかったが
技術で先行実装していたのは実はIE MSに工数かけさせるための嫌がらせで標準をIEと違えたんだよな。
割を食ったのはユーザー。と、お前ら。 下手にborder boxが混在するとそれはそれでややこしくもあるわけで・・はぁ
後ラッパーかなんかつけないと何かができなかった気がする。ラッパーつければいいだけだけど >>749
その点HTML5は素晴らしかった。
第三者の団体でどこにも利害関係ありませんーを装った、現実を考慮しない
標準化団体の奴ら(おかげで標準化が全然進まなかった)とは違い、
HTML5は各社ブラウザメーカー主導で行われた。
そのため仕様は当時の主流ブラウザ(当然IE含む)の互換性を考慮して作られた。
<!DOCTYPE html> という短い記述はIE6でも標準モードになるから採用されたし
<meta charset="UTF-8"> というHTML5の書き方は、従来は以下のように書かなければいけない
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
だけど、IE6でも対応しているから採用された。
IE6が作られた時代に<meta charset="UTF-8">という書き方は存在しなかったのに
何故動作するのか?それはブラウザの間違った記述でも動くおせっかい機能が働いたため
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
http-equiv書き忘れてもOKにしよう
<meta content="text/html; charset=UTF-8">
ダブルクォートでくくるの忘れる人もいるんじゃね?
<meta content=text/html; charset=UTF-8>
content書き忘れてもOKにしよう
<meta charset=UTF-8>
という謎理論で、たまたま動作していた挙動が仕様となった。
他にも壊れたHTMLの解釈の仕方まで、主流のブラウザの挙動を考慮して仕様が作られた html5.0 見出しは全部h1にしようぜwwwh見出し数えるの面倒なんだよね〜〜www
html5.1 ごめん、やっぱ今のナシ
初めて俺が主導したプロジェクト、ひっそりと死亡する 当時は標準がなかった、は本当なのか?
CSSが出来たのは1994年
IE1がリリースされたのも1994年 CSS1がW3Cから勧告されたのは1996年12月
提唱、いいだしたのが1994年
CSSに対応したブラウザは、IEが3.0(1996年8月)
ネットスケープが4.0(1997年6月) ボタンを押したらDBからデータを取得してテキストファイルに書き込みするって部分を作ってます
書き込む先のテキストファイルは決め打ちにしてたんだけど書き込んで名前をつけて保存、ってこともやりたいなと思うんですがjavascriptで名前を付けて保存のようなダイアログボックスを出すことは可能ですか? >>755
・ダイアログは可能
・ファイル名は決められる
・場所はセキュリティ上ほぼできないと思っていい(完全に自分用なら作れる)
ダウンロード以降、どこに保存するかはブラウザに任せるしかない
流れとしては、以下のような形
ボタンを押す→ダイアログを出してファイル名をきめさせる→ダウンロード >>756
ありがとうございます
場所は指定出来ないのですね
自分もダウンロードなら出来るのかなと思ってたのですが名前を変更する方法が分からず断念してました
Javascriptを触るのが今回初めてなので的外れな質問かもしれませんが、ダイアログを表示させたりするモジュールやパッケージなどが用意されているのでしょうか? >>757
パッケージとかは知らない。多分無いと思う
ヘッダ触れるなら以下で実現できる
https://ja.stackoverflow.com/questions/32487/
無理なら
ブラウザでボタンを押す、ダイアログを出してファイル名をきめさせる
→サーバーでファイル名を受け取り、その名前でファイル生成
→ダウンロード
いずれにしろph側の処理が必要で、js単独でやる方法は無いと思う。あったらゴメン >>758
丁寧にありがとうございます
周りに聞ける人もおらず誰か知らない人が作ったものの改良なんで心折れかけてました
javascript単体でなんとか完結出来るのかと思って探してたのですが(サーバー側とかの知識がないため)それも難しいようですね
重ねて質問で申し訳ないのですが、セキュリティ上の関係で保存場所の指定ができないというのはどういう意味なのでしょうか? >>759
保存場所の指定ができないというより、PCの中身にアクセスできないと言ったほうが正しい
もしブラウザからPCの中身を見る手段があると、サイトを開いた瞬間、サイトの持ち主からPCの中身全部丸見えという事になる
で、このセキュリティをガバガバにする方法があるんだけど、
かなりめんどくさい
完全に自分用ならそれは実現できるけどね >>758
> →サーバーでファイル名を受け取り、その名前でファイル生成
そんなことしたら、他人がつけたファイル名とかぶった時に大変なことになるだろ
> いずれにしろph側の処理が必要で、js単独でやる方法は無いと思う。あったらゴメン
ダウンロード属性を使えばできる
https://developer.mozilla.org/ja/docs/Web/HTML/Element/a
IEでできるかどうかはよくわからん
https://qiita.com/wadahiro/items/eb50ac6bbe2e18cf8813 >>761
ディレクトリ分ければ良い
/yamada/foo.csv
/suzuki/foo.csv なんでそんな中途半端な解答しかできんのだ?
同じ名前の人はどうする?
ユーザーIDを使うとしても、同じユーザーが
2つのブラウザで同時にダウンロードとかあるだろ
なんで一番簡単な、ランダムな名前でディレクトリを
作成するという回答が一番最初に出てこないんだ?
そのための、mktempコマンドや安全に一時ファイル
一時ディレクトリを作る関数が大抵の言語にあるというのに この前おしえてもらったダウンロード進捗
ステージングにデプロイしたら動かなくなった
サーバーがバッファリングしててストリームで返してくれない
ReadyState2〜4最後に一気にくる
しかもタイムアウトかなり短く設定されてるし
悲しい バッファリングやタイムアウトはプログラム側から変更できる だからそんな変なやり方をせずに、
新しい機能を無理やり使おうとせずに、
ファイルはファイルでダウンロードして、
進捗確認は別でAjaxでも使ってしろって言ったのに YouTube動画をmp4やmp3に変換するコンバーターサイト、変換の進捗をキッチリ表示しているけどあれはどうやってるんだ?
jsで変換してるのかね? >>767
純粋でかわいいなw
広告を見せているために、どんなファイルでも10秒かかったことにしてるだけだよ >>765
unicorn っていうエンジン?が タイムアウト時間になると Rails のプロセスを強制的にキルしててエラーメッセージ履くことすらできないんだけどこれのばすことってできるんですか?
バッファリングしない方法も教えてください
土日つぶしてあんなに苦労してつけたのが動かないとか涙出てくる
>>766
非同期実行のためのジョブサーバーの作り方教えてください;; >>769
今と同じですぐに制御を返すのではなく、待たせるのであれば
非同期にする必要はない 世に言う「新技術に振り回される」「技術に使われる」状態である。 泥沼にハマってるなぁ。無理なら無理って言えばいいのに
・csvに書き出す進捗は出せる
・zip圧縮の進捗は基本的には無理
だよ
zipの進捗はこの辺使えばイケルと思うけど、不毛すぎる
http://takuya-1st.hatenablog.jp/entry/2017/03/06/172644
やりたいことは
「いつダウンロードできるか知りたい」事なんだろうから、
圧縮終わったらDLファイルのURL書いたメール通知とかに仕様変更すればいいんじゃないの? zip圧縮の進捗は、
処理済みのファイルサイズの合計 ÷ 圧縮すべき複数のファイルサイズ合計
でいいと思うけどね
ファイルのダウンロード自体は単純にファイルを転送するだけにしておけば、
S3から直接ダウンロードに変更したり、別サーバーやフロントの
ウェブサーバーからダウンロードさせるように変更するのも楽
余計なことはしないほうが良い
あとは足りない「いつダウンロードできるか」部分だけを作ればいいだろう
>>772が書いている通り、進捗をファイルに書き出しておいて
メールで通知するのもありだし、Ajaxで情報を取りに行くのもありだろう
そうしておけば圧縮中にページ移動されたりしても対応可能になるのに 質問者の今の実装のままだと工期もすごい増えてバグだらけになるのが目に見えている
要件定義をしっかりして作り直したほうがいいぞ
今ならまだ間に合う >>772
>圧縮終わったらDLファイルのURL書いたメール通知
Rails からメール送るって簡単にできるんです?
メールサーバーとかないんだけどウェブサーバーからSMTPのプロトコルなげたとしても
最近のメーラーはFROMとDNSが一致してなかったらはじかれたりしないの?
>>773
圧縮はしてないんだけどなー
無圧縮でひとまとめにするためにZIP使ってるだけで
とにかくファイル数が多いので単に転送するのにじかんかかってる気がする
というかこの際進捗はどうでもよくてそれ以前に
数十秒で問答無用でキルされちゃうのでRails上の処理ではどうしようもない;;
基本的にフロントエンドしかさわったことないから
非同期にするしかないけどインフラとかサーバー設定になると
普通の人が5分でできるようなことも何時間何日も調べないといけない
赤ちゃんみたいなものなんです
たぶん>>734がいまの自分にできるフロントエンドだけで解決できるゆいつの方法な気がする >>777
難しすぎる…
たかが進捗つけるだけでなんでこんなよくわからないコマンドまで覚えなきゃいけないの
もうプログラムじゃないじゃんこれ;;
泣きそう httpとhttpsについて質問です
aタグのhref属性は
<a href="mevius.5ch.net/test/read.cgi/hp/1529144063/">
とプロトコルを抜くのが良いようですが、
サブドメインが変わる時のルールってありますか? よくわからないけどhttpsから省略せず書くことを
現在は推奨されてたはず >>782
な、なんですとーーー
調べたら確かにそうなってるんですね・・・
ありがとうございました、httpsつけて書きます 一時は抜くこと推奨されてたからなあ
いまだにそう思ってる人結構いそう ブラウザはまずhttpsで確認してから、無ければhttpで取得
こんな明確な理由があるんだから変わると思わんやん?やん? > ブラウザはまずhttpsで確認してから、無ければhttpで取得
そんな処理しない。
っていうかこれはGoogleがhttpsを強引に標準にしようとしてるだけだぞ
この点に関しては参考にするな
まず考えなきゃいけないことは、サイトはhttpでアクセスできるのか、
httpsでアクセスできるのか?両方でアクセスできるのか?だ
httpsで一本化できるなら一本化してしまえばいいが、httpsはいろいろと準備が必要になる
場合によってhttpでアクセスしたりhttpsでアクセスしたりするなら
プロトコル省略したほうが楽だろう。
http決め打ちで書くのは必要ないだろうね。
httpでアクセスできないならプロトコル省略でいいんだから
まとめると
httpsに一本化するなら、httpsでかく
両方アクセスしたいなら、省略
htmlだけでも、省略 mevius.5ch.net/test/〜〜では相対URLになってしまうから
プロトコル抜きで書きたいなら
//mevius.5ch.net/test/〜〜ね スレチだったらすいません
>>786
>まず考えなきゃいけないことは、サイトはhttpでアクセスできるのか、httpsでアクセスできるのか?
>両方でアクセスできるのか?だ
これはそもそもどのプロトコルでアクセスできるかどうかなんて分からない。あえて言うならhttpなら確実。
ドメインとサーバーが完全一体になっているならともかく、料金の支払いを忘れたら自分のサイトですら証明書が切れる
だから以下の前提が、無いんだ
>httpsに一本化するなら、httpsでかく
>両方アクセスしたいなら、省略
>htmlだけでも、省略 >>789
どういう場合が考えれられる?
さすがにfile://やftp%3A//ってのはなしにしてくれよ
それ言い出すと独自プロトコルで何でもアリになるからな ウェブサーバーからすればhttpとhttpsは独立してるので
httpsしか有効にしないこともできる ■ このスレッドは過去ログ倉庫に格納されています