文章目录
[隐藏]
1.新建文件Model( UploadForm )
class UploadForm extends Model
{
/**
* @var UploadedFile
*/
public $imageFile;
public function rules()
{
return [
[['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg, gif'],
];
}
public function upload()
{
if ($this->validate()) {
$new_name = 'uploads/' . $this->imageFile->baseName . '-' . time() . '.' . $this->imageFile->extension;
$this->imageFile->saveAs($new_name);
return $new_name;
} else {
return false;
}
}
}
项目web目录下创建uploads文件夹,并给读写操作权限
2.获取上传文件
public function uploadImage()
{
$data = \Yii::$app->request->post(); //获取formData参数
$model = new UploadForm();
$model->imageFile = UploadedFile::getInstanceByName('imageFile');
$fileName = $model->upload();
if (!empty($fileName)) {
//上传成功,fileName为图片路径
}else {
//上传失败
}
}
3.小程序上传文件
UploadTask wx.uploadFile(Object object)
将本地资源上传到服务器。客户端发起一个 HTTPS POST 请求,其中 content-type
为 multipart/form-data
。
参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
url | string | 是 | 开发者服务器地址 | |
filePath | string | 是 | 要上传文件资源的路径 | |
name | string | 是 | 文件对应的 key,开发者在服务端可以通过这个 key 获取文件的二进制内容 | |
header | Object | 否 | HTTP 请求 Header,Header 中不能设置 Referer | |
formData | Object | 否 | HTTP 请求中其他额外的 form data | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.success 回调函数
参数
Object res
属性 | 类型 | 说明 |
---|---|---|
data | string | 开发者服务器返回的数据 |
statusCode | number | 开发者服务器返回的 HTTP 状态 |
示例代码
wx.chooseImage({
success (res) {
const tempFilePaths = res.tempFilePaths
wx.uploadFile({
url: 'https://example.com/upload', //接口地址
filePath: tempFilePaths[0],
name: 'imageFile',//对应UploadedFile::getInstanceByName('imageFile')
formData: { //Yii:$app->request->post()获取参数
'user': 'test'
},
success (res){
const data = res.data
//do something
}
})
}
})
4.遇到问题
4.1.move_uploaded_file(uploads/xxx.jpg): failed to open stream: Permission denied
uploads文件夹权限不够,chmod 777 /uploads
4.2.The file “xxxx.jpg” is too big. Its size cannot exceed 2.00 MiB.
PHP 默认上传文件大小为2M,需要修改php.ini配置
Linux:修改php.ini
1. 查看php.ini路径
[root@localhost php-fpm.d]# php -i |grep php.ini
Configuration File (php.ini) Path => /etc
Loaded Configuration File => /etc/php.ini
2. 修改php.ini
vim /etc/php.ini
upload_max_filesize = 2M //按照自己需求修改最大上传文件大小
3. 重新加载php配置
systemctl reload php-fpm
总结:
1. 小程序UploadFile方法name和UploadedFile::getInstanceByName('imageFile')对应
2. 需要创建好uploads文件夹并分配权限
3. PHP默认最大上传文件为2M,按照需求修改
4. 小程序UploadFile无法上传多张图片,需要多次调用