iOS 上传zip文件到php服务端demo

需求:iOS端需要写一个上传文件到服务器的功能

客户端

现有工程用的网络库是 Alamofire

    func uploadFile(_ filePath : URL){
        Alamofire.upload(
            //采用post表单上传
            multipartFormData: { multipartFormData in
//                multipartFormData.append(filePath, withName: "file", fileName: "1.zip", mimeType: "application/zip")
                multipartFormData.append(filePath, withName: "file")
                //服务器地址
        },to: "http://127.0.0.1/1/upload.php",encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                //json处理
                upload.responseJSON { response in
                    
                    debugPrint(response)
                    //解包
                    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):
                debugPrint(encodingError)
            }
        })
    }

调用上面的上传函数,将 1.zip 这个文件上传服务器

        let zip = Bundle.main.path(forResource: "1", ofType: "zip")
        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let filePathStr = paths[0]+"/1.zip"
        FileManager.default.removeItem(atPath: filePathStr)
        try! FileManager.default.copyItem(atPath: zip!, toPath: filePathStr)
        let fileUrl = URL.init(fileURLWithPath: filePathStr)
        uploadFile(fileUrl)

服务端

服务器用的就是本机的 Apache

启动 Apache 服务
sudo apachectl start
重启
sudo apachectl restart
停止
sudo apachectl stop

在启动 Apache 服务前,先修改一下配置,或者修改后重启也可以。

修改 /private/etc/apache2/httpd.conf 文件,搜索 php 会搜到 LoadModule php7_module libexec/apache2/libphp7.so ,将这一行前面的#符号删掉

执行命令 sudo cp /private/etc/php.ini.default /private/etc/php.ini

执行到这里,如果上传的文件小于2M,就可以重启 Apache 服务了。

如果文件比较大,就要修改php.ini文件

  • file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开

  • upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

  • upload_max_filesize = 8m ;允许上传文件大小的最大值。默认为2M

  • post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

修改上面的参数,就可以写上传稍微大一点的文件了。

服务端代码

/Library/WebServer/Documents 目录下随意创建两个目录 11/upload(名字无任何意义,就是图简单)

创建 upload.php 文件存放在目录 1下,该文件内容就是下面的代码

<?php

$response = array();
$target_path  = $_SERVER['DOCUMENT_ROOT']."/1/upload/";//接收文件目录
$target_path = $target_path . basename( $_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
    $response ['success'] = "The file ".  basename( $_FILES['file']['name']). " has been uploaded";
}  else{
    $response ['error'] = "There was an error uploading the file, please try again!". $_FILES['file']['error'];
}
echo json_encode($response);
?>

文件上传到服务端,先存储到一个临时目录,然后上面这段 php 代码就是将客户端通过 POST 上传上来的临时文件移动到你指定的目录下,这里的指定目录是 /Library/WebServer/Documents/1/upload

ps:

echo 打印的就是服务端返回给客户端的字符串内容

upload 目录要有读写权限

URL 如果是 文件URL ,字符串以file:开头

客户端的 withName: "file" 必须和服务端的 $_FILES['file'] 相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值