Xamarin.Forms ファイルをMultipartでPostする
1.ファイルのアップロード
GAE側で、Google Cloud Vision APIを使って、OCRを実行するAPIを作成 し、Xamarinでファイルを選択することが出来たので、APIに、Multipart Postでファイルを送信し、OCRの結果を得る。
https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient.uploadfile?
この辺りを参考に。
- private async void FilePick()
- {
- var file = await CrossFilePicker.Current.PickFile();
- if (file != null)
- {
- byte[] fileBytes = null;
- using(MemoryStream ms = new MemoryStream()) {
- byte[] buf = new byte[1024 * 16];
- int read;
- var inputStream = file.GetStream();
- while ((read = inputStream.Read(buf,0,buf.Length)) > 0)
- {
- ms.Write(buf, 0, read);
- }
- fileBytes = ms.ToArray();
- }
- if (fileBytes != null)
- {
- string uri = "https://favophrase.com/api/upload-file";
- HttpClient httpClient = new HttpClient();
- MultipartFormDataContent form = new MultipartFormDataContent();
- form.Add(new StringContent(file.FileName), "fileName");
- form.Add(new ByteArrayContent(fileBytes, 0, fileBytes.Length), "file", file.FilePath);
- HttpResponseMessage response = await httpClient.PostAsync(uri, form);
- response.EnsureSuccessStatusCode();
- httpClient.Dispose();
- string sd = response.Content.ReadAsStringAsync().Result;
- await Page.DisplayAlert("Uploaded File.", sd, "OK");
- }
- }
- }
2.実行結果
Android,iPhone,UWP にて、それぞれ、ファイル選択から、ファイルアップロード、OCRの結果を表示できた。
いい感じ。