私はウェブ技術を初めて利用しています。私のプロジェクトでは、ファイルコンテンツをWebブラウザに送信する必要があります。ファイルサイズは数KBから100 MBまで変化します。大きなファイルサイズのコンテンツをブラウザに送信しようとすると、ブラウザは完全なファイルコンテンツを表示できません。テキストファイルの内容をウェブブラウザに送る最良の方法は何ですか、ファイルサイズは約100メガバイトですか?
まずは、基本的なアプローチでファイルを開き、その内容を読んで、データをブラウザに返信してみました。しかし、このアプローチは大きなファイルではうまくいかない。
グラハム・ダムプルトン(Graham Dumpleton)のthis linkで示唆したように私は試みました。
また、私はX-SendFileアプローチで試しました。
私はまだ大きなファイルデータのレンダリングに苦労しています。
コードスニペットが追加されました。
def sendFileContent(filePath, block_size=8192):
fileObject = open(filePath, 'rb')
data = ''
try:
data = fileObject.read(block_size)
while data:
yield data
data = fileObject.read(block_size)
finally:
try:
data.close()
except Exception:
pass
def application(environ, start_response):
filepath = 'C:\logs\ABC.txt'
filesize = os.path.getsize(filepath)
start_response('200 OK', [('Content-type', 'text/plain'),
('Content-Length', str(filesize)),])
file_wrapper = environ.get('wsgi.file_wrapper', None)
if file_wrapper:
filelike = open(filepath, 'rb')
return file_wrapper(filelike, 8192)
return sendFileContent(filepath)
Apache設定では、「EnableSendfile on」の変更も行いました。
上記の方法の問題は、私が100 MBのファイルブラウザを開こうとすると、60-65 MB後にレンダリングが停止するということです。私は、ファイルの最初の60から65 MBの内容を見ることができます、残りは空白です。ブラウザではファイルの最後までスクロールすることができますが、60〜65 MB後には内容が表示されません。
私はWindows上でApache 2.4、Python 3.5、MOD_WSGI、Werkzeugテクノロジを使用しています。
私にこれを案内してください。ありがとう
それを表示する、またはファイルを単にどこかに保存するというコンテキストで?それが表示用のものであれば、そんなに多くのデータを最初に表示する必要があるのはなぜですか? – tyteen4a03
もう少し必要です。あなたが試したことのコードを表示します。何がうまくいかないのか教えてください。 HTTPを使って大きなファイルをダウンロードする場合は問題ありません。 –
コードスニペットと問題の詳細が追加されました。 –