2016-04-27 13 views
0

だが、私はlhostsという名前のファイルがあり、そしてそれは実行可能だとしましょう:`send_file()`を使ってファイルのパーミッションを保持するには?

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

そしてここFlask.send_file()を使用してファイルを送信するために私のコードだ:

#!/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) 

しかし、私がしようとしているときクライアントにファイルを送信すると、許可を保持しません。許可は実行不能になります:

> 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 

ファイルを実行可能にするにはどうすればよいですか?

+2

HTTP応答がどのようにアクセス許可を示す必要がありますか?クライアントがWindows上にあるときにサーバーがGNU/Linux上にある場合はどうなりますか? –

+2

許可を保持したい場合は、送信する前にファイルを圧縮するためにコードをビューに追加することができます。受信者が解凍すると、古い許可が必要です。 – Bastian

答えて

2

直接することはできません。パーミッションなどのメタデータはファイルシステムの一部であり、各ファイルに関連付けられていますが、ファイルのデータには含まれていません。

ダウンロード用のHTTP repsponseは他の応答と同様に見えます。いくつかのヘッダーと本文です。本文はファイルのバイナリデータであり、ヘッダーは型、エンコーディング、およびファイル名のヒントに過ぎず、実際にはそれらは必要ありません。

ヘッダーにアクセス許可やその他のメタデータをエンコードするスキームを作成できますが、それを行うには受信側にカスタムコードを書く必要があります。あなたのコード以外のものがあなたのファイルをダウンロードする可能性があり、WindowsとUnixの権限が異なることも考慮する必要があります。

関連する問題