添付ファイルと保存先ディレクトリについて

コメント

6件のコメント

  • 正式なコメント
    服部健太

    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となってしまいます。

     

    コメントアクション Permalink
  • ak

    ご回答ありがとうございます。ファイルシステムの件、承知いたしました。

    度々の質問で申し訳ないのですが、

    openpyxlで処理を行いたい場合、openpyxlライブラリに、

    [file = /root/excelファイル2['attached1']]

    上記のパスを渡すだけでは不十分なのでしょうか?

     

    print(file['data']) -> # 添付ファイルの中身が表示される

    を実行してみたところ、中身が文字化けしてしまったのですが何か原因は考えられますでしょうか?

    よろしくお願い致します。

    0
    コメントアクション Permalink
  • 服部健太

    openpyxlライブラリの関数に渡すのは、Linuxファイルシステム上のファイルパスでしょうか?

    であれば、

    [file = /root/excelファイル2['attached1']] ->
    [file_path = file['path']] # 添付ファイルのLinuxファイルシステム上のファイルパスを取得

    で、ファイルパスが取れますので、そのパスを openpyxl ライブラリの関数に渡して処理することは可能かと思います。

    また、文字化けの件ですが、ファイルデータ(file['data'])をprintで表示する場合、バイナリデータとして扱われますので、ASCIIのテキストファイル以外は、文字化けしたように表示されます。

    0
    コメントアクション Permalink
  • ak

    ありがとうございます。文字化けの件、承知いたしました。

    はい。関数に渡すのは、Linuxファイルシステム上のファイルパスです。

    上記の方法で、ファイルパスを指定したのですが、

    というエラーが出てしまいます。

    内部的なファイル名である「~.file」だとopenpyxlが対応していないのだと思われます。

    現在のLinuxファイルシステム上のファイルパスを渡す方法以外で、他の対応策等はございますでしょうか?

     

    0
    コメントアクション Permalink
  • 服部健太

    https://kompira.zendesk.com/hc/ja/community/posts/4414520523801-%E6%B7%BB%E4%BB%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%8F%82%E7%85%A7%E6%96%B9%E6%B3%95%E3%81%AB%E9%96%A2%E3%81%97%E3%81%A6

    でコメントしましたとおり、Pythonのopen関数でファイルをオープンして取得したファイルオブジェクトをload_workblook関数に渡すのが良いかと思います。

    0
    コメントアクション Permalink
  • ak

    そのやり方で試してみたいと思います。

    ご回答ありがとうございましした。

    0
    コメントアクション Permalink

サインインしてコメントを残してください。