2017-03-11 1 views
0

Ziel: Rendern eines Bildes aus Rohdaten in IE11 und Edge.Bilddaten über URL über Proxy an Speicherdaten übergeben

Problem:

  • Das Bild von einem Aufruf einer API kommt, die nur rohe Bilddaten zurückgibt.
  • Der Bilddatenservice ist intern und kann und sollte nicht direkt von externen Netzwerken (Internet) aus zugänglich sein.
  • Die Daten können in anderen Browsern mit einer base64-Codierung des Bildes in einem Bild-Tag <img src="data://image/jpeg;base64,#{base64encodedDataHere}"> gerendert werden, aber es wird nicht im IE gerendert, da die Daten immer die 32 kB Grenze für diesen Tagtyp überschreiten.

Frage: In meiner Rails-Anwendung, wäre es möglich, eine Art von Proxying so einzurichten, dass ich eine URL auf meinen Rails-Anwendung Server aufbauen konnte und verwenden Sie es in einem Image-Tag, wie <img src='http://my-rails-app-server.com/images/123'>, dass würde dann den Dienst treffen, um die Bilddaten abzurufen, und sie dann auf eine Weise an den Browser zurückgeben, die sie für eine Bildquelle erwarten würde.

Einige Pseudo-Code:

class ImageProxy < ApplicationController 
    def show 
    data = ExternalImageDataRetriever.get_data_from("internal-network-image-service/images/123") 
    render something: data 
    end 
end 

Antwort

0

Stellt sich heraus, es außerordentlich leicht war.

Ich hatte bereits das Tool, das die Anfrage an die externe API in meinem Netzwerk für das Bild erstellt. Der Aufruf der API gibt 2 wichtige Dinge zurück: die Rohbilddaten und den Mime-Typ.

Alles, was ich tun musste, war diese durch Schienen zu passieren.

Die Controller-Aktion am Ende sieht aus wie diese

class ImageProxy < ApplicationController 
    def show 
    service_response = ExternalImageDataRetriever.get_data_from("internal-network-image-service/images/123") 
    render text: service_response.data, layout: nil, content_type: service_response.mime_type 
    end 
end 

Danach ist es nur wurde die Route zu dieser Controller-Aktion in einem Image-Tag in der Ansicht verwendet wird.