添付ファイルと保存先ディレクトリについて
お世話になっております。
添付ファイルについて質問がございます。
添付ファイルオブジェクトに「sample.xlsx」というexcelファイルを添付して、ファイルの保存先である/var/opt/kompira/uploadを確認したところ、「attached1_11.file」というファイル名で保存されていました。
kompira上でopenpyxlなどを用いて、excelファイルの参照を行いたいのですが、「/var/opt/kompira/upload/~/attached1_11.file」のパスでは、参照できませんでした。
ファイル名「sample.xlsx」に変更したら、参照することができたのですが、ファイル名を変更せずに保存されたexcelファイルを参照することは可能なのでしょうか?
またopenpyxlでファイルを編集すると、↓画像の添付ファイル1がsample.xlsx(0bytes)となってしまい、ファイルが開けなくなってしまうのですが、解決策はございますでしょうか?
よろしくお願い致します。

-
正式なコメント
Ver.1.6.3まで、Kompira上にアップロードされた添付ファイルは、内部的なファイル名で /var/opt/kompira/upload ディレクトリ以下に保存されるようになっております。ジョブフローから添付ファイルにアクセスする場合、添付ファイルオブジェクトの当該フィールドを参照することで、読み書きすることが可能です。
たとえば、「/root/excelファイル2」という添付ファイルオブジェクトの「添付ファイル1」にジョブフローからアクセスする場合は、
[file = /root/excelファイル2['attached1']] ->
print(file['name']) -> # 添付ファイル名が表示される
print(file['data']) -> # 添付ファイルの中身が表示される
...というように書きます。openpyxlで処理を行いたい場合は、上記データをopenpyxlライブラリの処理関数に渡すようなライブラリオブジェクトを実装する形になるかと思います。
マニュアルの
- 4.3.3.2.ファイル型(File)
- 5.3.13.添付ファイル(AttachedFile)
も合わせてご参照ください。
なお、ファイルシステムの/var/opt/kompira/upload/以下のファイルを直接、削除したりリネームした場合、Kompiraの添付ファイルオブジェクトからはファイルの実体を参照できなくなってしまうので、Kompiraの画面上からはファイルサイズが0となってしまいます。
コメントアクション -
openpyxlライブラリの関数に渡すのは、Linuxファイルシステム上のファイルパスでしょうか?
であれば、
[file = /root/excelファイル2['attached1']] ->
[file_path = file['path']] # 添付ファイルのLinuxファイルシステム上のファイルパスを取得で、ファイルパスが取れますので、そのパスを openpyxl ライブラリの関数に渡して処理することは可能かと思います。
また、文字化けの件ですが、ファイルデータ(file['data'])をprintで表示する場合、バイナリデータとして扱われますので、ASCIIのテキストファイル以外は、文字化けしたように表示されます。
-
でコメントしましたとおり、Pythonのopen関数でファイルをオープンして取得したファイルオブジェクトをload_workblook関数に渡すのが良いかと思います。
サインインしてコメントを残してください。

コメント
6件のコメント