簡體   English   中英

自定義Shrine gem JSON響應

[英]Customize Shrine gem JSON response

我正在Rails應用程序中使用shrine gem進行文件上傳。 我想將此gem與fineuploader前端庫集成在一起,以在上傳文件時增強用戶體驗。 我能夠將其集成到某種程度,以便能夠通過shine服務器端代碼通過fineuploader前端將文件上傳到我的s3存儲桶。

現在,在成功上傳后,我會收到帶有JSON響應的200狀態代碼,如下所示:

{"id":"4a4191c6c43f54c0a1eb2cf482fb3543.PNG","storage":"cache","metadata":{"filename":"IMG_0105.PNG","size":114333,"mime_type":"image/png","width":640,"height":1136}}

但是fineuploader期望JSON響應中的success屬性值為true ,以便將該響應視為成功。 因此,我需要修改此200狀態JSON響應以插入此成功屬性。 為此,我問了shrine gem的作者,他建議我在神社初始化文件中使用以下代碼:

class FineUploaderResponse
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)

    if status == 200
      data = JSON.parse(body[0])
      data["success"] = true
      body[0] = data.to_json
    end

    [status, headers, body]
  end
end

Shrine::UploadEndpoint.use FineUploaderResponse

不幸的是,此代碼無法正常工作,並且通過使用以下代碼而無法正常工作:fineuploader在控制台中引發以下錯誤:

Error when attempting to parse xhr response text (Unexpected end of JSON input)

請告訴我,我如何需要修改此代碼以使用有效的JSON響應插入success屬性。

更改正文后,您需要更新標頭中的Content-Length ,否則瀏覽器將其切斷。 如果執行此操作,它將可以正常工作:

class FineUploaderResponse
  def initialize(app)
    @app = app
  end

  def call(env)
    status, headers, body = @app.call(env)

    if status == 200
      data = JSON.parse(body[0])
      data['success'] = true
      body[0] = data.to_json

      # Now let's update the header with the new Content-Length
      headers['Content-Length'] = body[0].length
    end

    [status, headers, body]
  end
end

Shrine::UploadEndpoint.use FineUploaderResponse

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM