フォームの送信ではなく、クライアント側でファイルのアップロードをトリガーするにはどうすればよいですか?

ブランクマン

ここにあるs3を使用したアクティブストレージの例の作業バージョンがあります:

https://edgeguides.rubyonrails.org/active_storage_overview.html

フォームへの入力が終了したときではなく、ユーザーがアップロードするファイルを選択した直後にファイルのアップロードを実行できるようにしたいと思います。実際、私の場合、起動するオンドロップイベントを持つwysiwygエディターがあります

var myCodeMirror = CodeMirror.fromTextArea(post_body, {
   lineNumbers: true,
   dragDrop: true
  });

  myCodeMirror.on('drop', function(data, e) {
    var file;
    var files;
    // Check if files were dropped
    files = e.dataTransfer.files;
    if (files.length > 0) {
      e.preventDefault();
      e.stopPropagation();
      file = files[0];
      console.log('File: ' + file.name);
      console.log('File: ' + file.type);
      return false;
    }
  });

ファイルドロップがこのイベントをトリガーするので、これを何らかの方法でアクティブストレージに送信して、ファイルをS3にすぐにアップロードし始めることができますか?

カルロスラミレスIII

クライアント側からのアップロードのトリガー

Active Storageは、DirectUploadクライアント側から直接ファイルのアップロードをトリガーするために使用できるJavaScriptクラスを公開します。

これを利用して、サードパーティのプラグイン(Uppy、Dropzoneなど)または独自のカスタムJSコードと統合できます。

使用する DirectUpload

最初に行う必要があるのは、AWSS3が直接アップロードを処理するように設定されていることを確認することです。これには、CORS構成が適切に設定されていることを確認する必要があります。

次に、DirectUploadクラスのインスタンスをインスタンス化し、アップロードするファイルとアップロードURLを渡します。

import { DirectUpload } from "activestorage"

// your form needs the file_field direct_upload: true, which
// provides data-direct-upload-url
const input = document.querySelector('input[type=file]')
const url = input.dataset.directUploadUrl
const upload = new DirectUpload(file, url)

upload.create((error, blob) => { 
   // handle errors OR persist to the model using 'blob.signed_id'
})

ここで完全なドキュメントを参照してください:https//edgeguides.rubyonrails.org/active_storage_overview.html#integrating-with-libraries-or-frameworks

このDirectUpload#createメソッドはS3へのアップロードを開始し、エラーまたはアップロードされたファイルBLOBを返します。

エラーがないと仮定すると、最後のステップは、アップロードされたファイルをモデルに永続化することです。これを行うblob.signed_idには、ページのどこかにある非表示フィールドに配置するか、AJAXリクエストを使用してモデルを更新します。

ドロップ時にファイルをアップロードする

上記の場合、ドロップで直接アップロードを開始するには、上記のコードをdropハンドラーに配置するだけです。

このようなもの:

myCodeMirror.on('drop', function(data, e) {
   // Get the file
   var file = e.dataTransfer.files[0];

   // You need a file input somewhere on the page...
   const input = document.querySelector('input[type=file]')
   const url = input.dataset.directUploadUrl

   // Instantiate the DirectUploader object
   const upload = new DirectUpload(file, url)

   // Upload the file
   upload.create((error, blob) => { ... })
});

アセットパイプラインの使用

アセットパイプラインを使用していて、JavaScriptバンドラーツールを使用していない場合は、次のDirectUploadようなクラスのインスタンスを作成します

const upload = new ActiveStorage.DirectUpload(file, url)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ファイルの長さが1GBを超える場合、ファイルフォームクライアントをサーバーにアップロードするにはどうすればよいですか?

分類Dev

WebフォームLiferay7でファイルのアップロードをサポートするにはどうすればよいですか?

分類Dev

ページのリロード/更新がフォームと呼ばれるajaxを送信し、テキストとアップロードされたファイル/画像を取得するのを防ぐにはどうすればよいですか?

分類Dev

webapiアップロードでマルチパートファイルのストリームを取得するにはどうすればよいですか?

分類Dev

クライアント側のフォーム ビューで Google フォームを操作するにはどうすればよいですか

分類Dev

ストラップのアップロードフォルダからファイルを削除するにはどうすればよいですか?

分類Dev

JavaScriptを使用してファイルのアップロードをキャンセルするにはどうすればよいですか?しかし、男性はAjaxリクエストで残りのフォームフィールドを送信できます

分類Dev

クロスプラットフォームのモバイルアプリを作成するにはどうすればよいですか?

分類Dev

クライアント側からサーバーにフォームデータを送信するにはどうすればよいですか

分類Dev

フォームから2GB以上の大きなファイルを.NETCore APIコントローラーにアップロードするにはどうすればよいですか?

分類Dev

フォームから2GB以上の大きなファイルを.NETCore APIコントローラーにアップロードするにはどうすればよいですか?

分類Dev

ギャラリーからiOSのサポートファイルに画像をアップロードするにはどうすればよいですか?

分類Dev

フォームイベント(クライアント側イベント)でNetSuiteワークフローをトリガーするにはどうすればよいですか?

分類Dev

ヘッダーのないアップストリームフラットファイルの構造変更に続いて、新しいインポートコードを生成するにはどうすればよいですか?

分類Dev

プログラミングアプリケーションから送信しながら、Gmail、yahoo、Outlook、その他のクライアントで機能する汎用icsファイルを作成するにはどうすればよいですか?

分類Dev

Liferay JSFポートレットのデフォルトのログインフォーム/ポートレットをポップアップするリンク/ボタンを作成するにはどうすればよいですか?

分類Dev

ノードクライアントライブラリを使用して別の名前でローカルファイルをアップロードするにはどうすればよいですか?

分類Dev

プログラムでクライアント側でダウンロード ファイルの名前を変更するにはどうすればよいですか?

分類Dev

Androidで匿名のDropboxファイルリクエストに何かをアップロードするにはどうすればよいですか?

分類Dev

1つの拡張子ファイルのみを許可し、PHPでの重複エントリを回避することにより、アップロードフォームを検証するにはどうすればよいですか?

分類Dev

Laravelのファイルをパブリックフォルダに直接アップロードするにはどうすればよいですか?

分類Dev

1つのリクエストで複数のファイルをアップロードするにはどうすればよいですか?

分類Dev

jenkinsパイプラインプロジェクト(groovyスクリプト)のアーティファクトトリガーによってトリガーの原因を検出するにはどうすればよいですか?

分類Dev

現在のプラットフォームのファイルパス区切り文字にアクセスするにはどうすればよいですか?

分類Dev

このファイルアップロードスクリプトの拡張子の指定を修正するにはどうすればよいですか?

分類Dev

クロスプラットフォームの方法でファイルの変更時間を取得するにはどうすればよいですか?

分類Dev

不明なファイルタイプのデフォルトアプリケーションを変更するにはどうすればよいですか?

分類Dev

不明なファイルタイプのデフォルトアプリケーションを変更するにはどうすればよいですか?

分類Dev

マルチパート/フォームとチャンクエンコーディングの両方を使用して、Spring MVCでファイルアップロードを受信するにはどうすればよいですか?

Related 関連記事

  1. 1

    ファイルの長さが1GBを超える場合、ファイルフォームクライアントをサーバーにアップロードするにはどうすればよいですか?

  2. 2

    WebフォームLiferay7でファイルのアップロードをサポートするにはどうすればよいですか?

  3. 3

    ページのリロード/更新がフォームと呼ばれるajaxを送信し、テキストとアップロードされたファイル/画像を取得するのを防ぐにはどうすればよいですか?

  4. 4

    webapiアップロードでマルチパートファイルのストリームを取得するにはどうすればよいですか?

  5. 5

    クライアント側のフォーム ビューで Google フォームを操作するにはどうすればよいですか

  6. 6

    ストラップのアップロードフォルダからファイルを削除するにはどうすればよいですか?

  7. 7

    JavaScriptを使用してファイルのアップロードをキャンセルするにはどうすればよいですか?しかし、男性はAjaxリクエストで残りのフォームフィールドを送信できます

  8. 8

    クロスプラットフォームのモバイルアプリを作成するにはどうすればよいですか?

  9. 9

    クライアント側からサーバーにフォームデータを送信するにはどうすればよいですか

  10. 10

    フォームから2GB以上の大きなファイルを.NETCore APIコントローラーにアップロードするにはどうすればよいですか?

  11. 11

    フォームから2GB以上の大きなファイルを.NETCore APIコントローラーにアップロードするにはどうすればよいですか?

  12. 12

    ギャラリーからiOSのサポートファイルに画像をアップロードするにはどうすればよいですか?

  13. 13

    フォームイベント(クライアント側イベント)でNetSuiteワークフローをトリガーするにはどうすればよいですか?

  14. 14

    ヘッダーのないアップストリームフラットファイルの構造変更に続いて、新しいインポートコードを生成するにはどうすればよいですか?

  15. 15

    プログラミングアプリケーションから送信しながら、Gmail、yahoo、Outlook、その他のクライアントで機能する汎用icsファイルを作成するにはどうすればよいですか?

  16. 16

    Liferay JSFポートレットのデフォルトのログインフォーム/ポートレットをポップアップするリンク/ボタンを作成するにはどうすればよいですか?

  17. 17

    ノードクライアントライブラリを使用して別の名前でローカルファイルをアップロードするにはどうすればよいですか?

  18. 18

    プログラムでクライアント側でダウンロード ファイルの名前を変更するにはどうすればよいですか?

  19. 19

    Androidで匿名のDropboxファイルリクエストに何かをアップロードするにはどうすればよいですか?

  20. 20

    1つの拡張子ファイルのみを許可し、PHPでの重複エントリを回避することにより、アップロードフォームを検証するにはどうすればよいですか?

  21. 21

    Laravelのファイルをパブリックフォルダに直接アップロードするにはどうすればよいですか?

  22. 22

    1つのリクエストで複数のファイルをアップロードするにはどうすればよいですか?

  23. 23

    jenkinsパイプラインプロジェクト(groovyスクリプト)のアーティファクトトリガーによってトリガーの原因を検出するにはどうすればよいですか?

  24. 24

    現在のプラットフォームのファイルパス区切り文字にアクセスするにはどうすればよいですか?

  25. 25

    このファイルアップロードスクリプトの拡張子の指定を修正するにはどうすればよいですか?

  26. 26

    クロスプラットフォームの方法でファイルの変更時間を取得するにはどうすればよいですか?

  27. 27

    不明なファイルタイプのデフォルトアプリケーションを変更するにはどうすればよいですか?

  28. 28

    不明なファイルタイプのデフォルトアプリケーションを変更するにはどうすればよいですか?

  29. 29

    マルチパート/フォームとチャンクエンコーディングの両方を使用して、Spring MVCでファイルアップロードを受信するにはどうすればよいですか?

ホットタグ

アーカイブ