日本語ファイル名のアップロード(Python)

お世話になっております。

掲題の件について、ドキュメントには「日本語ファイル名のデータを

アップロードする際はUTF-8でエンコードされたものを指定」とあるのを確認しましたが、なかなかうまくいかない為ご相談させてください。

質問したいのは

1.ファイルをKintoneにアップロードする

2.レコードに紐づける

の1番目でして、該当部分のコードを抜き出したものが以下になります。


def uploadToKintone(self, filename):
data = open(filename, ‘rb’)

files={‘file’:frowning:filename.encode(‘utf-8’).decode(‘utf-8’),data,‘multipart/form-data’)} resp=requests.post(self.base_url+‘/file.json’,files=files,headers=self.upload_header)


太字部分が「UTF-8でエンコーディングする」の対応に該当するかと思っているのですが、ひょっとすると何か勘違いをしておりますでしょうか?

ちなみにファイル名が日本語無しの場合、アップロードはうまくいきます。

以上、よろしくお願いいたします。

PythonではなくてNode.js (Google Apps Script) で同様の問題にはまったことがあり、その時のコードを貼っておきます。色々うまくいかず最終的にマルチパートの生成を自前でやりました。

何かの参考になれば・・・

var blob = getBlob(file); // BLOBに変換
var boundary = ' ____JSTOKINTONE____'; //任意
var data = '--' + boundary + '\r' +
'Content-Disposition: form-data; name=\"file\"; filename=\"' + filename + '\"\r' +
'Content-Type: application/pdf\r\r';
var payload = Utilities.newBlob(data).getBytes()
.concat(blob.getBytes())
.concat(Utilities.newBlob('\r--' + boundary + '--').getBytes());
var options = {
method: 'POST',
contentType: "multipart/form-data; boundary=" + boundary,
headers: {'X-Cybozu-Authorization': token },
payload: payload
};