2016-08-18 1 views
1

。私は、ファイルのアップロード中にユーザーエクスペリエンスを強化するためにfineuploaderフロントエンドライブラリでこの宝石を統合したいです。私は私のS3バケットに神社サーバー側のコードを経由してfineuploaderフロントエンドを介してファイルをアップロードすることができるよ程度で、それを統合することができますよ。カスタマイズ神社の宝石JSONレスポンス

は今、成功したアップロードに私は次のようなものが表示されるJSON応答で200のステータスコード受信:

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

をしかしfineuploaderがためにtrueの値とJSON応答にsuccessプロパティを期待しますこの応答が成功したと考えてください。だから私はこの成功のプロパティを挿入するために、この200のステータスJSONレスポンスを変更する必要があります。このために、私はshrine宝石の作者を尋ね、彼は神社の初期化ファイルにこのコードを使用するように私に助言:

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を使用してInfactは、コンソールに次のエラーがスローされます:

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

私は有効なJSON応答でsuccessプロパティを挿入するには、このコードを変更する必要があるか、私にアドバイスしてください。

+0

ソリューションを見つけましたか? – Robin

答えて

2

あなたが身体を変更した後、あなたは、ヘッダーまたはブラウザ内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