2016-04-27 5 views
0

Lassen Sie uns sagen, dass ich eine Datei, die lhosts benannt ist, und es ist ausführbar:Wie behalte ich die Erlaubnis der Datei mit `send_file()`?

-rwxr-xr-x 1 kevin kevin 2.4K Apr 27 21:16 lhosts* 

Und hier ist mein Code die Datei mit Flask.send_file() zu senden:

#!/usr/bin/env python3 
from flask import Flask, send_file 

app = Flask(__name__) 


@app.route('/lhosts') 
def lhosts(): 
    return send_file('scripts/lhosts') 


app.run(debug=True) 

Allerdings, wenn ich versuche zu Senden Sie die Datei an Clients, sie behält die Erlaubnis nicht. Die Berechtigung wird nicht ausführbar:

> wget 'http://127.0.0.1:5000/lhosts' --preserve-permissions 
--2016-04-27 22:27:39-- http://127.0.0.1:5000/lhosts 
Connecting to 127.0.0.1:5000... connected. 
HTTP request sent, awaiting response... 200 OK 
Length: 2381 (2.3K) [application/octet-stream] 
Saving to: ‘lhosts’ 

lhosts        100%[================================================================>] 2.33K --.-KB/s in 0s  

2016-04-27 22:27:39 (76.7 MB/s) - ‘lhosts’ saved [2381/2381] 

> ls -lh lhosts 
-rw-r--r-- 1 kevin kevin 2.4K Apr 27 21:16 lhosts 

Wie kann ich die Datei ausführbar halten?

+2

Wie sollte die HTTP-Antwort die Berechtigungen anzeigen? Was passiert, wenn der Server unter GNU/Linux läuft, während der Client unter Windows läuft? –

+2

Wenn Sie die Berechtigung beibehalten möchten, können Sie der Ansicht Code hinzufügen, um die Datei vor dem Senden zu komprimieren. Wenn der Empfänger die Datei dekomprimiert, sollte sie die alte Berechtigung haben. – Bastian

Antwort

2

Sie können nicht direkt. Metadaten wie Berechtigungen sind Teil des Dateisystems, das mit jeder Datei verknüpft ist, aber nicht Teil der Dateidaten ist.

Ein HTTP Repsponse für einen Download sieht genauso aus wie jede andere Antwort: einige Header und ein Körper. Der Hauptteil besteht aus den Binärdaten der Datei, die Header sind nur der Typ, die Codierung und der Dateinamenshinweis, und keiner davon wird tatsächlich benötigt.

Sie könnten ein Schema erstellen, um die Berechtigungen oder andere Metadaten in einer Kopfzeile zu codieren, aber Sie müssten benutzerdefinierten Code auf der Empfängerseite schreiben, um etwas damit zu tun. Sie müssen auch berücksichtigen, dass andere Dinge neben Ihrem Code Ihre Dateien herunterladen können, und dass die Berechtigungen zwischen Windows und Unix variieren.

Verwandte Themen