Class: Filepond::Rails::IngressController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- Filepond::Rails::IngressController
- Defined in:
- app/controllers/filepond/rails/ingress_controller.rb
Instance Method Summary collapse
-
#fetch ⇒ Object
FilePond calls this endpoint when a URL is dropped onto the upload widget.
-
#remove ⇒ Object
FilePond calls this endpoint when a user removes (ie. undos) a file upload.
Instance Method Details
#fetch ⇒ Object
FilePond calls this endpoint when a URL is dropped onto the upload widget. The server acts as a “proxy” for the client in order to load a file. We then redirect to the actual file which is now served from our servers, and proceed through the usual route.
Note that the implementation below may not be the most efficient. The alternative way would be to directly proxy the request to the URL where the file is originally hosted.
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'app/controllers/filepond/rails/ingress_controller.rb', line 15 def fetch # We explicitly declare this for clarity of what is in the # raw_post value as sent by FilePond uri = URI.parse(raw_post) url = uri.to_s blob = ActiveStorage::Blob.create_and_upload!( io: URI.open(uri), filename: URI.parse(url).path.parameterize ) if blob.persisted? redirect_to ::Rails.application.routes.url_helpers.rails_service_blob_path( blob.signed_id, blob.filename ) else head :unprocessable_entity end end |
#remove ⇒ Object
FilePond calls this endpoint when a user removes (ie. undos) a file upload. This ensures that the blob is removed.
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'app/controllers/filepond/rails/ingress_controller.rb', line 36 def remove # We explicitly declare this for clarity of what is in the # raw_post value, as sent by FilePond signed_id = raw_post blob = ActiveStorage::Blob.find_signed(signed_id) if blob blob.purge head :ok else # If we cannot find the blob, then we'll just return 404 head :not_found end end |