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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

Q&A

解決済

1回答

4008閲覧

ファイルをPOSTでアップロードして$_FILESで受け取りたい

otftrough

総合スコア476

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PHP

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

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

0グッド

0クリップ

投稿2020/03/30 10:47

C#のアプリケーションからPOSTでデータを送り、PHPで受け取りたいです。
PHP側は$_POST['name']$_FILES['file']で受け取ります。
こちらのサイトを参考に書きましたが、
nameとfileが両方とも$_POSTに入ってしまっていました。
var_dump($_POST)すると、$_POST['file']にはバイナリデータが入っていたので、送信自体は出来ているようです。
_FILESで受け取るにはどうすればよいでしょうか。

(呼び出し側)

C#

1var content = new Dictionary<string, string>() 2{ 3 { "name", tbName.Text } 4}; 5 6var files = new Dictionary<string, string>() 7{ 8 { "file", SelectedFile } 9}; 10var res = PostAPI("music/create/", content, files, Settings.token);

(メソッド)

C#

1public static string PostAPI(string url, Dictionary<string, string> nameValue, Dictionary<string, string> files, string token) 2{ 3 var enc = Encoding.GetEncoding("utf-8"); 4 var boundary = Environment.TickCount.ToString(); 5 6 var req = (HttpWebRequest)WebRequest.Create(REQUEST_URL + "/" + url); 7 req.Method = "POST"; 8 req.ContentType = "multipart/form-data; boundary=" + boundary; 9 req.Headers.Add("Token", token); 10 11 var postData = ""; 12 foreach(string key in nameValue.Keys) 13 { 14 postData += "--" + boundary + "\r\n" + 15 "Content-Disposition: form-data; name=\"" + key + "\"\r\n\r\n" + nameValue[key] + "\r\n"; 16 } 17 foreach(string key in files.Keys) 18 { 19 var filename = Path.GetFileName(files[key]); 20 postData += "--" + boundary + "\r\n" + 21 "Content-Disposition: form-data; name=\"" + key + "\" filename=\"" + filename + "\"\r\n"; 22 } 23 postData += 24 "Content-Type: application/octet-stream\r\n" + 25 "Content-Transfer-Encoding: binary\r\n\r\n"; 26 27 byte[] startData = enc.GetBytes(postData); 28 postData = "\r\n--" + boundary + "--\r\n"; 29 byte[] endData = enc.GetBytes(postData); 30 31 long fsLength = 0; 32 var fileStreams = new FileStream[files.Keys.Count]; 33 int count = 0; 34 foreach (string key in files.Keys) 35 { 36 var filestream = new FileStream(files[key], FileMode.Open, FileAccess.Read); 37 fileStreams[count] = filestream; 38 fsLength += filestream.Length; 39 count++; 40 } 41 42 req.ContentLength = startData.Length + endData.Length + fsLength; 43 44 var reqStream = req.GetRequestStream(); 45 reqStream.Write(startData, 0, startData.Length); 46 foreach (FileStream fs in fileStreams) 47 { 48 var readData = new byte[0x1000]; 49 int readSize; 50 while (true) 51 { 52 readSize = fs.Read(readData, 0, readData.Length); 53 if (readSize == 0) 54 break; 55 reqStream.Write(readData, 0, readSize); 56 } 57 fs.Close(); 58 } 59 reqStream.Write(endData, 0, endData.Length); 60 reqStream.Close(); 61 62 var res = (HttpWebResponse)req.GetResponse(); 63 StreamReader sr = new StreamReader(res.GetResponseStream(), enc); 64 var resText = sr.ReadToEnd(); 65 sr.Close(); 66 return resText; 67}

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

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

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

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

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

guest

回答1

0

ベストアンサー

WebRequest、HttpWebRequest共に現在非推奨クラスなので、HttpClientで実装してみてください。検索したらすぐHITすると思います。
multipart/form-data送信にも対応しているようです。

投稿2020/04/11 16:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問