偉大なる先人
VisualStudio2017でガルーンAPIを使ってメッセージを送ってみる
SOAPど素人なこともあって、ガルーンAPIの実装でかなり悩んでたところ
こんな素敵な記事を見つけて一命を取り止めました。ありがたや。
感謝と尊敬の念を込めてタイトルパクりました。
やりたいこと
上記のメッセージ送信APIに添付ファイルを追加する。
実装
メッセージ送信処理については上記記事に詳しく記載されているため割愛。
ファイル添付のリクエスト作成処理のみ抜粋。
FileMessageTest.cs
// 添付したいファイルのパス
string[] fileDirArray = { @"C:\hoge.jpg", @"C:\fuga.jpg" };
// 添付ファイル実体配列
MessageCreateThreadTypeFile[] files = new MessageCreateThreadTypeFile[0];
// 添付ファイル情報配列
contentFile[] cFiles = new contentFile[0];
// ファイル数分ループ
for (int cnt = 0; cnt < fileDirArray.Length; cnt++)
{
string fileDir = fileDirArray[cnt];
string fileName = fileDir.Substring(fileDir.LastIndexOf('\\') + 1);
//------------------
// ファイル実体
//------------------
// 1.添付するファイルをバイト配列にする
FileStream fs = new FileStream(fileDir, FileMode.Open, FileAccess.Read);
byte[] bs = new byte[fs.Length];
fs.Read(bs, 0, bs.Length);
fs.Close();
// 2.ファイル設定
MessageCreateThreadTypeFile file = new MessageCreateThreadTypeFile();
file.content = bs;
file.id = cnt.ToString();
// 3.添付ファイル配列に追加
Array.Resize(ref files, cnt + 1);
files[cnt] = file;
//------------------
// ファイル情報
//------------------
// 1.ファイル情報設定
contentFile cFile = new contentFile();
cFile.id = cnt.ToString();
cFile.size = (ulong)bs.Length;
cFile.name = fileName;
cFile.mime_type = "image/jpeg";
// 2.添付ファイル配列に追加
Array.Resize(ref cFiles, cnt + 1);
cFiles[cnt] = cFile;
}
// 添付ファイル実体配列、添付ファイル情報配列をそれぞれセット
messageThreadType.file = files;
threadType.content.file = cFiles;
調査結果
ファイル形式について
Reference.cs内でバイト配列からBase64形式にデシリアライズしてくれてるっぽい。
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="base64Binary")]
ファイル実体と情報について
ファイル自体のバイト配列とファイルの情報(ファイル名、サイズ、MIME_TYPE)は全然違うとこに持ってた。
それぞれのidでお互い紐づいている模様。