1

Kohana 3.2 でファイル アップロード リクエストをシミュレートすることは可能ですか? 私は次のことを試みていましたが、あまり運がありませんでした:

$file = file_get_contents('../../testimage.jpg');

$request = new Request('files');
$request->method(HTTP_Request::POST);
$request->post('myfile', $file);
//$request->body($file);
$request->headers(array(
            'content-type' => 'multipart/mixed;',
            'content-length' => strlen($file)
        ));
$request->execute();
4

2 に答える 2

0

この Kohana フォーラムの投稿は、それが可能であることを示しています。あなたのコードとの類似性を考えると、あなたはすでにそれを見つけたと思います。それがうまくいかない場合は、cURL を試すことができます。

$postData = array('myfile' => '@../../testimage.jpg');
$uri = 'files';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, true);

$response = curl_exec($ch);

Kohana Request を使用する場合は、このコードを使用して独自のマルチパート ボディを構築してみてください (現在、テストするための適切なセットアップはありませんが、必要なものに近いはずです)。

$boundary = '---------------------' . substr(md5(rand(0,32000)), 0, 10);
$contentType = 'multipart/form-data; boundary=' . $boundary;
$eol = "\r\n";
$contents = file_get_contents('../../testimage.jpg');

$bodyData = '--' . $boundary . $eol;
$bodyData .= 'Content-Type: image/jpeg' . $eol;
$bodyData .= 'Content-Disposition: form-data; name="myfile"; filename="testimage.jpg"' . $eol;
$bodyData .= 'Content-Transfer-Encoding: binary' . $eol;
$bodyData .= $contents . $eol;
$bodyData .= '--' . $boundary . '--' . $eol . $eol;

$request = new Request('files');
$request->method(HTTP_Request::POST);
$request->headers(array('Content-Type' => $contentType));
$request->body($data);
$request->execute();
于 2012-06-12T01:29:25.030 に答える
0

この件について議論している GitHub からのプル リクエストを見つけました。問題を回避するために、コントローラーにいくつかのテストコードを追加することになりました。

if ($this->request->query('unittest'))
    {
        // For testing, don't know how to create internal requests with files attached.
        // @link http://stackoverflow.com/questions/10988622/post-a-file-via-request-factory-in-kohana
        $raw_file = file_get_contents(APPPATH.'tests/test_data/sample.txt');
    } 

Request::files()メソッドがいいでしょう。

于 2013-03-02T18:30:05.177 に答える