質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3121閲覧

Guzzle ファイル名が日本語のファイルをアップロードするとファイル名が消える

t-yknow

総合スコア4

kintone

kintone(キントーン)とは、サイボウズ社が提供する業務改善プラットフォームです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/01/12 01:14

編集2021/01/12 05:05

Guzzleを使ってフォームからファイルをアップロードさせる機能を作っています。アップロード先はkintoneで、Excel,Word,pdf,jpgなどをアップロードします。表題の通りファイル名が日本語の時にファイル名が正しく出ず、docxでは開けなくなってしまいます。
(追記)kintoneのドキュメントに「※日本語ファイル名の場合は UTF8 でエンコードした内容を指定して下さい。」と記載がありました。

試したこと
Uploadテスト.docx → 問題なし(アップロード後のファイル名:Uploadテスト.docx)
Upload_test.docx → 問題なし(アップロード後のファイル名:Upload_test.docx)
テスト.docx → 問題あり(アップロード後のファイル名:.docx)
ファイル名をエンコードしてみましたが同じ結果でした。

流れとしては
フォームからGuzzleでkintoneへファイルをアップロード

fileKeyを取得

他のフォーム項目と合わせてfileKeyをkintoneへPOST
という方法になります。

fileKeyは取得できておりますし、ファイルの中のデータはそのままアップされているのでファイル名だけが問題です。htmlにはUTF-8を指定しています。
試しに$_FILESの中をみてみたところ
array(1) {
["file"]=>
array(5) {
["name"]=>
string(14) "テスト.docx"
["type"]=>
string(71) "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
["tmp_name"]=>
string(14) "/tmp/phpnAUzQi"
["error"]=>
int(0)
["size"]=>
int(16651)
}
}
となっております、
また、var_dumpでヘッダーをみてみたところ
["Content-Type"]=> array(1) { [0]=> string(30) "application/json;charset=utf-8" }
となっておりました。
エンコードの仕方が間違っていますでしょうか。調べてもGuzzleドキュメントをみても解決方法が見つからず困っています。
初心者なため簡単な解決法をどうかご教授いただければ幸いです。

【環境】
guzzlehttp/guzzle: 6.5
php 7.2.34

function fileupload(){ $Url = "https://xxxxx.cybozu.com/k/v1/file.json"; $client = new \GuzzleHttp\Client([ 'http_errors' => false ]); $filename = mb_convert_encoding($_FILES['resume']['name'], "UTF-8", "auto"); $res = $client->request('POST', $Url,[ 'multipart' => [ [ 'name' => 'file', 'contents' =>fopen($_FILES['file']['tmp_name'], 'r'), 'filename' => $filename, ] ], 'headers' => [ 'X-Cybozu-API-Token' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' ], ]); $response = json_decode($res->getBody()); if($res->getStatusCode() == 200){ return $response->fileKey; }else{ } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t-yknow

2021/01/12 01:54

ありがとうございます。 どのphpタグでしょうか?ご指定のurlに飛びましたがフォームに関連するタグが見つけれれずご教授いただけましたら幸いです。
m.ts10806

2021/01/12 02:02 編集

違います。 「質問タグとしてkintoneを追加してください」という質問自体の修正依頼です。
guest

回答1

0

自己解決

ローケルを設定してみたところ解決できました。
参考サイト
https://qiita.com/REAS_7/items/3f86a0834d612edaecd6

投稿2021/01/12 12:42

t-yknow

総合スコア4

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問