假设我有一个名为lhosts
的文件,它是可执行文件:
-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
如何保持文件的可执行性?
答案 0 :(得分:2)
你不能直接。权限等元数据是文件系统的一部分,与每个文件相关联,但不是文件数据的一部分。
下载的HTTP repsponse看起来就像任何其他响应一样:一些标题和正文。正文是文件的二进制数据,标题只是类型,编码和文件名提示,实际上并不需要这些数据。
您可以创建一个方案来对标头中的权限或其他元数据进行编码,但是您需要在接收端编写自定义代码以对其执行某些操作。您还需要考虑除了代码之外的其他内容可以下载您的文件,并且Windows和Unix之间的权限也不同。