美文网首页
ios上传图片到php yii2 服务器实现方式

ios上传图片到php yii2 服务器实现方式

作者: hwhjxjs | 来源:发表于2019-04-04 18:01 被阅读0次

上传图片

最近在做一个上传图片的功能,因为接触yii2时间不长,所以不了解有什么好的方法实现,网上找了几种方法,虽然的确都能实现,但是都是手机端和php实现的方式。和yii2实现方式得资料貌似很少。所以记录如下

一 swift端

1.首先从相册选择图片

    //图库 - 照片
    func photoLib(){
        //
        flag = "图片"
        //判断设置是否支持图片库
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary){
            //初始化图片控制器
            let picker = UIImagePickerController()
            //设置代理
            picker.delegate = self
            //指定图片控制器类型
            picker.sourceType = UIImagePickerController.SourceType.photoLibrary
            //弹出控制器,显示界面
            self.present(picker, animated: true, completion: {
                () -> Void in
            })
        }else{
            print("读取相册错误")
        }
    }

2.系统回掉

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if flag == "视频" {
            
            //获取选取的视频路径
            let videoURL = info[UIImagePickerController.InfoKey.mediaURL] as! URL
            let pathString = videoURL.path
            print("视频地址:\(pathString)")
            //图片控制器退出
            self.dismiss(animated: true, completion: nil)
            let outpath = NSHomeDirectory() + "/Documents/\(Date().timeIntervalSince1970).mp4"
            //视频转码
            self.transformMoive(inputPath: pathString, outputPath: outpath)
        }else{
            //flag = "图片"
            
            //获取选取后的图片
            let pickedImage = info[UIImagePickerController.InfoKey.originalImage] as! UIImage
            //转成jpg格式图片
            guard let jpegData = pickedImage.jpegData(compressionQuality:0.5) else {
                return
            }
            //上传
            self.uploadImage(imageData: jpegData)
            //图片控制器退出
            self.dismiss(animated: true, completion:nil)
        }
    }

3.上传图片到服务器

    //上传图片到服务器
    func uploadImage(imageData : Data){
        Alamofire.upload(
            multipartFormData: { multipartFormData in
                //采用post表单上传
                // 参数解释:
                //withName:和后台服务器的name要一致 ;fileName:可以充分利用写成用户的id,但是格式要写对; mimeType:规定的,要上传其他格式可以自行百度查一下
                multipartFormData.append(imageData, withName: "imageFile", fileName: "123456.jpg", mimeType: "image/jpeg")
                //如果需要上传多个文件,就多添加几个
                //multipartFormData.append(imageData, withName: "file", fileName: "123456.jpg", mimeType: "image/jpeg")
                //......
                
        },to: uploadURL,method: .post,encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                //连接服务器成功后,对json的处理
                upload.responseJSON { response in
                    //解包
                    guard let result = response.result.value else { return }
                    print("json:\(result)")
                }
                //获取上传进度
                upload.uploadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
                    print("图片上传进度: \(progress.fractionCompleted)")
                }
            case .failure(let encodingError):
                //打印连接失败原因
                print(encodingError)
            }
        })
    }

二 php端

1、新建一个Controller

class TestController extends Controller
{

    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance( "imageFile");
            if ($model->upload()) {
                // 文件上传成功
                return ;
            }
        }

        return $this->render('index', ['model' => $model]);
    }
}

其中UploadedFile是改写了的,源码里面的适合接受网页提交的,修改如下,就可以正常接受了


2.

class UploadForm extends Model
{
    /**
     * @var UploadedFile
     */
    public $imageFile;

//    public function rules()
//    {
//        return [
//            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg, jpeg'],
//        ];
//    }

    public function upload()
    {
        if ($this->validate()) {
            $this->imageFile->saveAs('../web/upload/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }
}

这样就可以顺利实现PHP端和ios端交互了。
源码如下 php 源码 https://github.com/hwhjxjs/tplapiNew.git
ios源码 https://github.com/hwhjxjs/uploadPicDemo.git

相关文章

网友评论

      本文标题:ios上传图片到php yii2 服务器实现方式

      本文链接:https://www.haomeiwen.com/subject/ncrqiqtx.html