問題タブ [skipper]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - Sails.js スキッパーがファイルのアップロードを中止する
ユーザーが画像ファイルをサーバーにアップロードできるSails-jsベースのアプリケーションを作成しています。ファイルをディスクに保存する前に、ファイルが本当に画像ファイルかどうかを確認したいと思います。
スキッパー ディスク アダプターと格闘した後、アップロードを完了する前にファイルのプロパティを確認できなかったようです。ファイルの種類を確認して、または同様の応答を試みた場合、アップロードを終了させてres.json("error, wrong file type")
から応答しない限り、クライアントは応答を受け取りませんでした。これは、アップロード後にすべての検証を行う必要があることも意味します。ミドルウェアを介してエンドポイントを保護する Sails ポリシーがあるため、これは特に厄介です。未完成のアップロードは、コントローラーの前に実行する必要がある認証ミドルウェアでさえも何とかブロックします。
以下は、ファイルをディスクに保存し、検証エラーが発生した場合は削除する私の最善の試みです。非常に不満です。また、認証されていないユーザーがファイルをアップロードしようとすると、応答しません。
Skipper のディスク アダプターに不満を感じた後、そのドキュメントを参照し、独自のレシーバーの作成に関するドキュメントを見つけました。その情報とStackoverflow の同様の問題を利用して、次のコードを作成しました。
このようにして、ストリームをもう少し制御できるようになり、リクエストからストリームを取得してからファイルストリームにパイプするという基本的な考え方を理解したと思います。読み取り可能なイベントで、ファイルのタイプを確認しようとします。ただし、ストリームの中止は依然として問題です。試行錯誤の末end()
、ファイル ストリームと出力ストリームの両方に対して関数を呼び出すことができました。ストリームを正しく理解していれば、ストリームを閉じる必要があります。req.file('image).upload
レシーバーが間違ったファイル タイプを検出した直後に、関数から正しい見た目の戻り値を取得します。しかし、私はまだ応答を返すことができます! 本当に大きなファイルで試した後、次のようになります
新しいチャンクをログに記録し続けます。これは、ファイル ストリームが期待どおりに閉じられなかったことを意味します。
最後に私の最後の質問は、Sails.js/Skipper で着信 http-request ストリームを適切に中止するにはどうすればよいですか?
sails.js - 文字列/画像 base64 を Sailsjs に送信する方法 - ajax を使用したスキッパー
現在、カメラの画像、このBase64形式をキャプチャしており、ajax経由で送信しています。
0 個のファイルが正常にアップロードされました!
node.js - Sails.js Skipper:アップロード中にアップロードされたファイルストリームを読み取る方法は?
ファイルのアップロード用にスキッパーがバンドルされているセイル バージョン 0.11 を使用しています。少なくともサイズが 100 MB を超える大きなファイルをアップロードする必要があります。
サーバーでファイルの処理を開始する前に、ファイルのアップロードを完了させたくありません。アップロード中にファイル ストリームを読み取りたい。これが私が同じことを達成しようとしている方法です:
しかし、ログには終了イベントのみが表示され、データ イベントはキャプチャされません。req.file("filename")
ファイルストリームのストリームを返すドキュメントを読みました。しかし、アップロードするファイルは 1 つだけなので、必要な特定のファイル ストリームにアクセスするにはどうすればよいでしょうか。
node.js - Sails js:単一のパラメーターのreq.fileメソッドを介して渡されたファイルの数を確認する方法
私はsails jsにs3への画像のアップロードを処理するコントローラーを持っています。すべてが正常に機能し、パラメーター「画像」(req.file('image') を介してアクセスできる) に対して 1 つのファイルのみが送信されたと仮定して、画像が s3 にアップロードされます。複数のファイル ( input type="file" multiple ) ではなく、1 つのファイル ( input type="file" ) のみが送信およびアップロードされることを検証する方法を知りたいです。
事実: 複数のファイルが正常にアップロードされていますが、req.file('image')._filesに複数のファイルが表示されません。
file-upload - 大きなファイルがマルチアップロード形式でアップロードされると、Sails.js ファイルのアップロードで空のファイル配列が返される
Sails.js プロジェクトにマルチパート フォームがあり、いくつかのテキストパラメータと共に 2 つの異なるファイル (最初にaudio、次にimage ) を送信します。ファイルがかなり小さい場合、ほとんどの場合、すべて正常に動作します。しかし、より大きなオーディオ ファイル ( 33MB ) を試したところ、受信側のイメージ フィールドに空のファイル配列が作成されました。ここにいくつかのコードがあります。
コントローラー:
基本的にここで、音声と画像の次のログを取得します。
デバッグを試みたところ、画像フィールドの場合、ファイルが実際にprototype.onFile.js
行に書き込まれている行に到達しないことがわかりましたup.writeFile(part);
。
また、デバッグ ログには次のように出力されます。
理由はわかりませんが、画像ファイルが書き込まれる前に、コントロールが既にアプリに渡されているようです。繰り返しますが、これはより大きなオーディオ ファイルでのみ発生します。これを修正する方法はありますか?
EDIT:
さらにデバッグすると、receivedFirstFileOfRequest
画像ファイルが書き込まれる前にリスナーが呼び出されることが示されました。最初のファイルのアップロードを実際にリッスンするため、どちらが論理的ですが、次のファイルをどうするか?
編集: ああ...ファイルは非常に大きくする必要はまったくありません。29KB のファイルは通過し、320KB は通過しません...
node.js - Sails.js と Skipper でアップロードされたファイルの保存をキャンセルする
スキッパーアップロード機能で、ファイル保存を行うべきではないなどの制約を検知した場合、ファイル保存をキャンセルすることはできますか?
次のようなコードのスニペットがあります。
saveAs 関数では、最初にレコードをデータベースに保存し、アップロードされたファイルを、保存されたレコードから返された id のような名前で保存します。しかし、データベースへの保存に失敗した場合 (たとえば、検証エラーが原因で)、ディスクへのファイルの保存をキャンセルして、そのエラーをさらに渡すにはどうすればよいですか?
node.js - スキッパーの maxTimeToBuffer 属性を変更する方法
一度に複数のファイルをアップロードするためにスキッパーとスキッパー-紺碧を使用しています。少数のファイルをアップロードすると、一度に 20 から 30 のファイルをアップロードすると、すべて正常に動作しますが、200 または 300 などのより多くのファイルをアップロードすると、次のメッセージが表示され始めます。一部のファイル、つまりすべてのファイルではなく、2 つまたは 3 つのファイルのみでエラーが発生します。
アップストリームが受信機に接続される前にタイムアウトしました
Sails>node_modules>skipper>Standalone>Upstream>Upstream.js ファイルには属性がmaxTimeToBuffer
あり、そのデフォルト値は4500
、これをコードに変更すると10000
正常に動作し、100 回以上テストしました。
私の質問は
- この変更の影響は?
- メインファイルを変更する代わりに、この構成をオーバーライドできる場所はありますか?更新ごとにこの構成を削除したくありません。
事前に助けてくれてありがとう