2014-04-24 11 views
6

Ich versuche, nginx für Datei-Uploads einzurichten und die Dateiinformationen an einen Backend-Server weiterzugeben, sobald dies erledigt ist. Ich bin auf einen Post bei https://coderwall.com/p/swgfvw gestoßen, der zeigt, wie man das macht, und ich kann sehen, dass eine Datei in das Verzeichnis/tmp hochgeladen wird. Allerdings möchte ich auch den Dateinamen und -typ (Content-Disposition und Content-Type) an den Backend-Server weitergeben.nginx Datei-Typ an Backend-Server übergeben

Ich habe versucht, die Erfassung, was am HTTP-Server-Port und sehen Sie die unten

POST /upload HTTP/1.1 
User-Agent: curl/7.32.0 
Host: MyHostName 
Accept: */* 
Content-Length: 4431 
Expect: 100-continue 
Content-Type: multipart/form-data; boundary=------------------------6060af4f937c14c9 

--------------------------6060af4f937c14c9 
Content-Disposition: form-data; name="filedata"; filename="sessions.txt" 
Content-Type: text/plain 

gefolgt von den Daten empfangen wird.

Mein nginx Standort Block für den Upload ist,

 location /upload { 
       limit_except POST  { deny all; } 

       client_body_temp_path   /tmp/; 
       client_body_in_file_only  on; 
       client_body_buffer_size   128K; 
       client_max_body_size   100M; 

       proxy_redirect     off; 
       proxy_set_header    X-FILE $request_body_file; 
       proxy_set_header    X-Forwared-For $proxy_add_x_forwarded_for; 
       proxy_set_header    Host $http_host; 
       proxy_set_header    X-NginX-Proxy true; 
       proxy_set_header    Connection ""; 
       proxy_pass_request_headers  on; 
       proxy_set_body     off; 
       proxy_http_version    1.1; 
       proxy_pass      http://my_backend; 
     } 

Damit ich in der Lage bin weiterzugeben und die folgende an meinem Backend zu erhalten,

'content-type': 'multipart/form-data; boundary=------------------------6060af4f937c14c9' 
'x-file': '/tmp/0000000001' 

aber würde wirklich gerne wissen, wie ich kann die

Content-Disposition: form-data; name="filedata"; filename="sessions.txt" 
Content-Type: text/plain 

zu meinem Backend bekommen. Jede Hilfe mit diesem wird sehr geschätzt.

P.S: hoffe es ist ok für diese Frage hier? (Versuchte Superuser aber es scheint nicht viel Aktivität zu haben)

+0

Hattest du jemals etwas Glück dabei? Befinden sich die Content-Dispo-Header am Anfang der Datei mit dem erwarteten Verhalten? Und wenn ja, entfernst du sie später aus, um die Datei (Bild) oder die Instanz anzuzeigen? – Mike

+0

Eigentlich nein, ich entschied mich gegen diesen Ansatz für jetzt aber denke, Parsing die Datei auf dem Upstream-Server wäre eine Möglichkeit, um dies zum Funktionieren zu bringen (wird wahrscheinlich so etwas versuchen, wenn ich die Chance bekomme). –

+0

Ich frage mich auch, ob jemand etwas Glück dabei hatte ... – stackular

Antwort

0

wenn der Header ignoriert wird, versuchen

proxy_pass_header Content-Disposition; 

oder direkt

proxy_set_header  Content-Disposition $http_content_disposition; 
+0

Habe beide versucht, aber trotzdem keine Content-Disposition am Backend-Server erhalten :( –

0

Die Unterstrichen in benutzerdefinierten Header übergeben sind stumm ignoriert in nginx, eine Option, die helfen könnte

undercores_in_headers on;