2

現在、ファイルのアップロードを許可するサイトを持っています。ユーザーがフォームを送信すると、API に curl リクエストを送信する php スクリプトを実行します。

現在、php リクエストは次のようになっています。

$params = array(
    'media' => "@" . $_FILES['media']['tmp_name']
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);

API は$_FILESフィールドをチェックし、メディアを取得して実行しmove_uploaded_fileます。

そのため、ファイルはユーザーが送信したフォームから curl から API サーバーに直接送信され、ファイルが実際にアップロードされることはありません (フォームの送信と curl リクエストの間の tmp フォルダーに配置される以外に) API サーバーに到達するまでは。

これはすべて、ファイルを api サーバーにアップロードするために正常に機能しますが、問題は、curl 要求が送信するファイルであるため、サーバーがファイルの拡張子を png などではなく .tmp と見なすことです。

APIサーバーが実際に送信されているファイルを認識できるように、最初にカール前にアップロードせずにファイルを送信するにはどうすればよいですか?

4

1 に答える 1

2

ふたつのやり方:

  • tmp ファイルの名前を変更します。アクセスできるので、名前を変更するのは簡単です。rename(oldname, newname)
  • MIME タイプを送信します。形式は次のとおり@filename;type=image/pngです。png の場合。

ファイル名を気にする場合は最初のオプションを優先し、MIME タイプのみを気にする場合はオプション 2 を優先します。

于 2013-05-17T20:03:50.240 に答える