お世話になっております。
掲題の件について、ドキュメントには「日本語ファイル名のデータを
アップロードする際はUTF-8でエンコードされたものを指定」とあるのを確認しましたが、なかなかうまくいかない為ご相談させてください。
質問したいのは
1.ファイルをKintoneにアップロードする
2.レコードに紐づける
の1番目でして、該当部分のコードを抜き出したものが以下になります。
def uploadToKintone(self, filename):
data = open(filename, ‘rb’)
files={‘file’
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
};