新規投稿
フォローする

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

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

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

アップロードする際は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でエンコーディングする」の対応に該当するかと思っているのですが、ひょっとすると何か勘違いをしておりますでしょうか?

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

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

0

1件のコメント

Avatar
安藤 光昭

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

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

  var blob = getBlob(file);   // BLOBに変換
var boundary = '____JSTOKINTONE____'; //任意
var data = '--' + boundary + '\r\n' +
'Content-Disposition: form-data; name=\"file\"; filename=\"' + filename + '\"\r\n' +
'Content-Type: application/pdf\r\n\r\n';
var payload = Utilities.newBlob(data).getBytes()
.concat(blob.getBytes())
.concat(Utilities.newBlob('\r\n--' + boundary + '--').getBytes());
var options = {
method: 'POST',
contentType: "multipart/form-data; boundary=" + boundary,
headers: {'X-Cybozu-Authorization': token },
payload: payload
};
安藤 光昭により編集されました
0
サインインしてコメントを残してください。