我正在尝试在POST API调用中上传文件。但$ _FILES总是空的!
我上传的文件是非常小的图像,所以它不会超过限制问题。我不确定这是一般性问题还是与yii相关的问题。
我已尝试使用Postman和AdvancedRestClient,但获得了相同的空数组:var_dump($_FILES);
也尝试在我的本地机器和共享主机,但也相同。
更新:
public function saveFile($fName)
{
$postData = fopen($_FILES['image']['tmp_name'], "r");
$extension = substr($_FILES['image']['name'], strrpos($_FILES['image']['name'], '.'));
$filename = 'pics/' . $fName . $extension;
$fp = fopen($filename, "w");
while ($data = fread($postData, 1024)) {
fwrite($fp, $data);
}
fclose($fp);
fclose($postData);
return $fName . $extension;
}
我正在使用普通代码段来保存图像。我认为问题不在图像保存中,而是由于请求没有看到发送的文件。
更新
我使用了另一个框架(不是Yii)并为$ _FILES获得了正确的值:
array(1) { ["image"]=> array(5) { ["name"]=> string(9) "qmark.jpg" ["type"]=> string(10) "image/jpeg"
["tmp_name"]=> string(24) "C:\xampp\tmp\php29DE.tmp" ["error"]=> int(0) ["size"]=> int(436656) } }
所以我在Yii做错了。 我没有UI,只是一个POST API(actionAdd)。 有什么理由我得$ _FILES空?
表单的属性为enctype =“multipart / form-data”?
https://www.webslesson.info/2017/02/upload-file-without-using-form-submit-in-ajax-php.html
本教程可以帮助您上传图像文件而无需使用表单和eny ..
我也使用这样的fwrite,也许可以帮到你
if( Yii::$app->session['length'] <= 4 ){
if( $success['ok']!= false ){
$root= $_SERVER['DOCUMENT_ROOT'];
$file = fopen($root.'/web/uploads/'.$filename.$success['ext'], 'w+');
fwrite($file,base64_decode($_POST['pic_file']));
fclose($file);
Yii::$app->session['pic_available']-=1;
Yii::$app->session['pic_file'].=$filename.$success['ext'];
}
}
和高级版本是:
$root= $_SERVER['DOCUMENT_ROOT'];
$file = fopen($root.'/web/uploads/'.$filename.$success['ext'], 'w+');
$content = $_POST['pic_file'];
$pieces = str_split(base64_decode($content), 1024 * 4);
foreach ($pieces as $piece) {
fwrite($file, $piece, strlen($piece));
}
fclose($file);
Yii::$app->session['pic_available']-=1;
Yii::$app->session['pic_file'].=$filename.$success['ext'].'|';