Rails: Die beste Methode, um Benutzern das Hochladen von Bildern in einen mit Dropbox verknüpften Ordner oder "unseren" Speicher auf Amazon S3 zu ermöglichen

8

Ich arbeite an einem Projekt, bei dem der Benutzer einem "Stream" beitritt. Während der Stream-Konfiguration kann die Person, die den Stream erstellt (der Stream-Ersteller), entweder:

auswählen
  1. Laden Sie alle Fotos hoch, die Mitglieder zu unserer Hosting-Lösung (S3)
  2. hinzugefügt haben
  3. Laden Sie alle Fotos hoch, die von Mitgliedern zum Stream hinzugefügt wurden, in den eigenen Dropbox-authentifizierten Ordner des Stream-Erstellers

Ich möchte in Zukunft weitere Speicheranbieter (wie Drive, Onesky usw.) hinzufügen

Es gibt ein paar verschiedene Fragen, die ich habe, wie ich das lösen kann.

  1. Was sollte die Struktur in der Datenbank für Fotos sein? Ich habe zur Zeit nur photo_url, aber das wird nicht leicht aus Datenperspektive mit vor-signierten URLs zu verwalten sein und wenn es verschiedene Möglichkeiten gibt ein Foto hochzuladen (s3, dropbox etc.)
  2. Wie sollten die Zugriffstoken für jeden Speicheranbieter gespeichert werden? Denken Sie daran, dass nur das access_token des Stream-Creators gespeichert wird und alle, die sich im Stream befinden, dieses Token teilen, wenn sie Fotos hochladen
  3. Ich werde in Zukunft iOS- und Webclients hinzufügen, die direkt zum Speicheranbieter hochladen und den Server umgehen, um eine starke Belastung des Servers zu vermeiden
Anders H 05.05.2017, 13:24
quelle

2 Antworten

1

Was den Datenbankspeicher betrifft, sollte Ihre Anwendung die Struktur basierend auf der Schnittstelle diktieren, die Sie sowohl dem Benutzer als auch dem Stream präsentieren. Wenn Sie ein Foto hochladen und die URI nicht auswählen können und keine Hierarchie innerhalb eines Streams vorhanden ist, empfehle ich Ihnen, nur eine ID und eine Stream-ID in Ihrer Haupt-Fototabelle zu speichern.

Sie könnten also zumindest etwas wie

sehen %Vor%

Aber Sie möchten wahrscheinlich auch eine Beschreibung und andere Informationen, die unabhängig vom Speicher sind.

Die Streams-Tabelle würde alle generischen Informationen über einen Stream enthalten, hätte aber eine polymorphe Assoziation zu einer vom Typ des Streams abhängigen Klasse. So könnten Sie diese Assoziation verwenden, um eine Instanz von S3Stream oder DropBoxStream basierend auf dem tatsächlichen Stream zu erhalten. Diese Instanz (auch eine ActiveRecord-Ressource) könnte den Zugriffsschlüssel und für Dinge wie Dropbox den Pfad zum Ordner usw. speichern. Darüber hinaus könnte diese Instanz Methoden zum Erstellen eines URIs für Ihr Photo-Objekt bereitstellen. Wenn eine bestimmte Technologie signierte URIs zwischenspeichern muss, dann kann das S3Stream-Objekt auf ein S3SignedUrl-Modell verweisen, in dem die URIs signiert sind. Wenn sich herausstellt, dass der signierte URL-Code zwischen DropBox und S3 ähnlich ist, haben Sie vielleicht ein einzelnes SignedUrl-Modell.

Wenn Sie die IOS- und Android-Clients entwickeln, ist es wichtig, dass sie keinen Zugriff auf die Zugriffstoken des Stream-Eigentümers erhalten. Stattdessen müssen Sie alle Signaturen in Ihrer Server-App durchführen. Sie möchten nicht, dass eine Kompromittierung eines Geräts dazu führt, dass das Zugriffstoken offengelegt wird, was zu Abrechnungsproblemen und Datenschutzrisiken führt. Hoffe, das hilft.

    
Sam Hartman 14.05.2017, 14:00
quelle
0
___ tag123rubyonrails ___ Ruby on Rails ist ein Open-Source-Full-Stack-Webanwendungs-Framework, das in Ruby geschrieben ist. Es folgt dem populären MVC-Framework-Modell und ist bekannt für seinen "convention over configuration" -Ansatz für die Anwendungsentwicklung. ___ tag123amazons3 ___ Amazon S3 (einfacher Speicherdienst) ist ein Online-Objektspeicherdienst von Amazon Web Services. ___ qstnhdr ___ Rails: Die beste Methode, um Benutzern das Hochladen von Bildern in einen mit Dropbox verknüpften Ordner oder "unseren" Speicher auf Amazon S3 zu ermöglichen ___ qstntxt ___

Ich arbeite an einem Projekt, bei dem der Benutzer einem "Stream" beitritt. Während der Stream-Konfiguration kann die Person, die den Stream erstellt (der Stream-Ersteller), entweder:

auswählen
  1. Laden Sie alle Fotos hoch, die Mitglieder zu unserer Hosting-Lösung (S3)
  2. hinzugefügt haben
  3. Laden Sie alle Fotos hoch, die von Mitgliedern zum Stream hinzugefügt wurden, in den eigenen Dropbox-authentifizierten Ordner des Stream-Erstellers

Ich möchte in Zukunft weitere Speicheranbieter (wie Drive, Onesky usw.) hinzufügen

Es gibt ein paar verschiedene Fragen, die ich habe, wie ich das lösen kann.

  1. Was sollte die Struktur in der Datenbank für Fotos sein? Ich habe zur Zeit nur photo_url, aber das wird nicht leicht aus Datenperspektive mit vor-signierten URLs zu verwalten sein und wenn es verschiedene Möglichkeiten gibt ein Foto hochzuladen (s3, dropbox etc.)
  2. Wie sollten die Zugriffstoken für jeden Speicheranbieter gespeichert werden? Denken Sie daran, dass nur das access_token des Stream-Creators gespeichert wird und alle, die sich im Stream befinden, dieses Token teilen, wenn sie Fotos hochladen
  3. Ich werde in Zukunft iOS- und Webclients hinzufügen, die direkt zum Speicheranbieter hochladen und den Server umgehen, um eine starke Belastung des Servers zu vermeiden
___ answer43964748 ___

Was den Datenbankspeicher betrifft, sollte Ihre Anwendung die Struktur basierend auf der Schnittstelle diktieren, die Sie sowohl dem Benutzer als auch dem Stream präsentieren. Wenn Sie ein Foto hochladen und die URI nicht auswählen können und keine Hierarchie innerhalb eines Streams vorhanden ist, empfehle ich Ihnen, nur eine ID und eine Stream-ID in Ihrer Haupt-Fototabelle zu speichern.

Sie könnten also zumindest etwas wie

sehen %Vor%

Aber Sie möchten wahrscheinlich auch eine Beschreibung und andere Informationen, die unabhängig vom Speicher sind.

Die Streams-Tabelle würde alle generischen Informationen über einen Stream enthalten, hätte aber eine polymorphe Assoziation zu einer vom Typ des Streams abhängigen Klasse. So könnten Sie diese Assoziation verwenden, um eine Instanz von S3Stream oder DropBoxStream basierend auf dem tatsächlichen Stream zu erhalten. Diese Instanz (auch eine ActiveRecord-Ressource) könnte den Zugriffsschlüssel und für Dinge wie Dropbox den Pfad zum Ordner usw. speichern. Darüber hinaus könnte diese Instanz Methoden zum Erstellen eines URIs für Ihr Photo-Objekt bereitstellen. Wenn eine bestimmte Technologie signierte URIs zwischenspeichern muss, dann kann das S3Stream-Objekt auf ein S3SignedUrl-Modell verweisen, in dem die URIs signiert sind. Wenn sich herausstellt, dass der signierte URL-Code zwischen DropBox und S3 ähnlich ist, haben Sie vielleicht ein einzelnes SignedUrl-Modell.

Wenn Sie die IOS- und Android-Clients entwickeln, ist es wichtig, dass sie keinen Zugriff auf die Zugriffstoken des Stream-Eigentümers erhalten. Stattdessen müssen Sie alle Signaturen in Ihrer Server-App durchführen. Sie möchten nicht, dass eine Kompromittierung eines Geräts dazu führt, dass das Zugriffstoken offengelegt wird, was zu Abrechnungsproblemen und Datenschutzrisiken führt. Hoffe, das hilft.

    
___ antwort43934913 ___

Wir haben viele Rails-Anwendungen mit verschiedenen Arten von Dateispeichern eingerichtet.

  1. Ja, nur eine URL ist in Zukunft nicht zu verwalten. Um eine Menge Zeit zu sparen, könntest du Edelsteine ​​wie carrierwave oder Beispiel für eine Büroklammer )

  2. Ich weiß nicht genau, wie Ihr Stream funktioniert, daher kann ich darauf keine gute Antwort geben. -

  3. Mit dem Setup, das ich in 1. erwähnt habe, sollten Sie Ihre verschiedenen Clients direkt auf S3 oder Dropbox usw. hochladen und nach dem Hochladen teilt der Client dem Rails Backend mit, dass er die Datei von dieser URL importieren soll. (Und bevor Büroklammer oder Carrierwave ihre Verarbeitung beenden, können Sie die tmp-URL aus der Datei verwenden, um etwas direkt in Ihrem Stream anzuzeigen)

___
Simon Franzen 12.05.2017 10:02
quelle

Tags und Links