2012-06-12 10 views
7

Ich baue eine Datei-Manipulation-API in Rails, und ich muss in der Lage sein, über ein separates Juwel darauf zuzugreifen. Die API verwendet Carrierwave, und dieses Stück funktioniert problemlos. Was ich nicht verstehe, ist, eine beliebige Datei zu nehmen und sie über die Gem-Schnittstelle an die API zu senden.Wie lade ich eine Datei über Carrierwave über eine JSON API hoch?

Carrierwave nimmt seine Dateien entweder als Ergebnis von File.open('foo.jpg') oder als POST aus einem Dateifeld. Ich bin mir aber wirklich nicht sicher, was ich mache, um die Datei zu serialisieren und mitzuschicken.

Wie nehme ich den Inhalt einer Datei und mache daraus etwas, das ich weitergeben und per JSON posten kann?

+0

Meinen Sie das API Sachen als JSON statt Formularparameter empfängt? –

+0

Das stimmt. Die API empfängt Dinge in JSON, da sie eine Befehlszeilenschnittstelle anstelle einer browserbasierten Schnittstelle unterstützen soll. –

Antwort

4

Wenn ein HTML-Formular eine Datei POST erstellt, passiert tatsächlich ein spezieller Teil von HTTP, der als mehrteilige Anforderung bezeichnet wird. Effektiv wird die Datei an die Anfrage "angehängt".

Die Frage wird von der Bibliothek beantwortet, die Sie verwenden, um den JSON an Ihre API zu senden. Das Anhängen einer Datei an eine Anfrage sollte ziemlich allgemein sein, aber nicht alle Bibliotheken unterstützen sie.

This stack overflow article seems to give some good indications of how to do it.

+0

Dies ist ein guter Weg, um die Dinge zu erreichen, die ich erreichen wollte. Es klingt wie die ursprüngliche Frage beginnt mit einer schlechten Voraussetzung - eine Datei würde nicht zu einem JSON-Objekt überhaupt serialisiert werden, sondern reitet in einem völlig anderen Teil des Protokolls. Auf jeden Fall bringt mich diese Bibliothek zu einem guten Start, und wenn ich mich frage, wie es funktioniert, kann ich immer den Quellcode davon finden. Vielen Dank! –

+0

Genau. Insbesondere können Sie eine Datei in den JSON einbetten, indem Sie die base64-Kodierung oder eine andere ASCII-Kodierung verwenden. Ich würde diesen Pfad jedoch nicht empfehlen, wenn Sie ihn nicht wirklich benötigen. –

Verwandte Themen