csvやzip、postデータでmultipartを使うには

phpからmultipartでデータをアップロードするにはどうするの?

multipartを使うとPOSTデータ以外にCSVファイル、zipファイルなどをアップロードできます。

PHPを使った方法を記載します。
multipart/form-dataを利用してPOSTデータを送るには、cURLライブラリを使用するのが一般的です。
この方法を使うとCSVや画像などのファイルや他のデータを含めた複合的なデータをPOSTできます。

以下、PHPのサンプルです。


<?php
// 送信先URL
$url = 'https://example.com/upload';

// POSTデータの準備
$postData = [
    'username' => 'test_user',
    'file' => new CURLFile('/path/to/your/file.jpg', 'image/jpeg', 'file.jpg')
];

// cURLセッションの初期化
$ch = curl_init();

// オプションの設定
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// POSTリクエストの実行
$response = curl_exec($ch);

// エラーチェック
if ($response === false) {
    echo 'cURL Error: ' . curl_error($ch);
} else {
    echo 'Response: ' . $response;
}

// cURLセッションを閉じる
curl_close($ch);
?-->


**CURLFile**クラスを使用してファイルを送信しています。
MIMEタイプは'image/jpeg'のように指定します。
その他
**CURLOPT_RETURNTRANSFER**をtrueにすることで、リクエストの応答をcurl_exec()の戻り値として取得します(画面に直接出力しない)。
multipart/form-dataはフォームからファイルとテキストデータを同時に送信する場合に使用されるエンコーディングで、ファイルアップロードに適していますがプログラムからアップロードする場合は、上記を参考にcURLを利用すると便利です。

その他言語を利用したmultipartの方法としてASPを利用した例を下記に記載します。IISを利用した場合は応用できるのでASP.NETなどで利用できます。


    objXmlHttp.Open "POST", strUrl, False
    objXmlHttp.SetRequestHeader "Content-Type", "multipart/form-data; boundary=""" & strBoundary & """"
    
    strPostData = "--" & strBoundary & vbCrLf
    strPostData = strPostData & "Content-Disposition: form-data; name=""access_token""" & vbCrLf & vbCrLf
    strPostData = strPostData & strToken & vbCrLf
    strPostData = strPostData & "--" & strBoundary & vbCrLf
    strPostData = strPostData & "Content-Disposition: form-data; name=""f""" & vbCrLf & vbCrLf
    strPostData = strPostData & "json" & vbCrLf
    strPostData = strPostData & "--" & strBoundary & vbCrLf
    strPostData = strPostData & "Content-Disposition: form-data; name=""csv_file""; filename=""csvfile.csv""" & vbCrLf
    strPostData = strPostData & "Content-Type: text/plain" & vbCrLf & vbCrLf
    strPostData = strPostData & """E-Mail""" & vbCrLf
    strPostData = strPostData & strDelListData
    strPostData = strPostData & "--" & strBoundary & "--"
    objXmlHttp.send strPostData

    If objXmlHttp.readyState = 4 And objXmlHttp.Status = 200 Then
        'アップロードOK
    End If


なお、サーバ間でやり取りする場合は、上記のようにソケット通信を利用したやり方も可能です。

multipartを利用したアップロードはあまり例がないので、ぜひ上記を活用してください。

おすすめの記事