2009-07-31 5 views
1

Ich habe eine Rails-Anwendung, die offene Office-Dateien generiert, und ich habe einen Dienst an einem anderen Speicherort, der diese Open Office-Dateien in Microsoft Office-Dateien konvertieren wird. Ich möchte eine Controlleraktion haben, die die geöffnete Office-Datei an den Konverter sendet und dann die zurückgegebene Microsoft Office-Datei für den Benutzer bereitstellt. Wie könnte ich das tun?Aussetzen von Dateien von einem Dienst über eine Rails-Anwendung

-C

Antwort

3

prüfen

send_file @file.path, :x_sendfile => true 

bei apidock aus.

Dies ermöglicht es Ihnen, Dateien aus dem Dateisystem mit Rails-Authentifizierung zu liefern, aber die eigentliche Datei wird durch Ihre Apache/Lightt-Modul gehen und wird nicht eine Rails-Prozess binden.

Sofern Sie das MS Office-Dokument zurückbekommen, möchten Sie wahrscheinlich, dass der Dienst eine andere Aktion aufruft, die Ihrer Rails-App mitteilt, dass sie das neue Dokument herunterladen soll.

class MyController < ApplicationController 
    def get_new_document 
    unless params[:file_path].nil? or params[:server_uri].nil? 
     @new_document = Net::Http.get(params[:server_uri], params[:file_path]) 
     @new_document.save # save to filesystem 
    end 
    end 
end 
+0

Erwähnenswert 'send_data' hier, wie es war, was ich brauchte. Manchmal können Sie die Rohdaten haben, in diesem Fall würde 'send_file' erfordern, dass Sie eine temporäre Datei erstellen. – Crisfole

0

x_sendfile ist nicht verfügbar, wenn Sie werden mit nginx passieren, wenn Sie sind, können Sie X-Accel-Redirect verwenden. Weitere Informationen finden Sie hier:

http://kovyrin.net/2006/11/01/nginx-x-accel-redirect-php-rails/ 
Verwandte Themen