前提・実現したいこと
PDFを編集し、ダウンロードさせる処理をDjangoで書いています。
このページを参考にダウンロードビューや周辺の処理を書いているのですが、
open()
関数で作成したPDFをshut.copyfileobj()
でコピーしようとし他ところで下記のエラーが発生します。
発生している問題・エラーメッセージ
io.UnsupportedOperation: read
該当のソースコード
該当の部分だけ切り抜くと下記のような感じです。
Python
1 # PDFファイルの作成 2 output_file = open('output.pdf', 'wb') 3 output_file.close() 4 print('pdf:', type(output_file)) 5 6 # ファイル名からmimetypeを推測。拡張子がないファイル等は、application/octet-stream 7 response = HttpResponse(content_type=mimetypes.guess_type(name)[0] or 'application/octet-stream') 8 9 # Content-Dispositionでダウンロードの強制 10 response['Content-Disposition'] = f'attachment; filename="{name}"' 11 12 # HttpResponseに、ファイルの内容を書き込む 13 shutil.copyfileobj(file, response) 14 15 return response
試したこと
エラーの意味を考えると、open()
関数で作成したファイルがread()メソッドを持っていないということです。
では、「open()
関数で作成したファイル」がなんなのかと見てみると、_io.BufferedWriter
でした。
Pythonの公式ドキュメントを見てみると、io.BufferedWriterについての記述はあり、これはread()関数を持つクラスを継承しています。
本来open()
関数ではio.BufferedWriter
が生成され、readやらwriteやらの処理が行われると思うんですが、なんでここでは_io.BufferedWriter
が生成されてしまうのでしょうか?
補足情報(FW/ツールのバージョンなど)
Python 3.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。