今天翻了翻原来的项目,突然发现之前自己写多图上传那部分有些乱,整理了一下,写篇博文记录一下,顺便验证一下最近自己写PHP代码的接收图片是否成功;
对于多张图片的上传,往往项目需求时图片全部上传成功后要进行一下操作,看了一些其他的博文,给出了很好的办法,其中一种就是单张上传,并用GCD dispatch group来完成全部上传完成后的统一回调,代码如下:
dispatch_group_t group = dispatch_group_create();
for (NSInteger i = 0 ; i<images.count; i++) {
dispatch_group_enter(group);
[manager POST:url parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData* imageData = UIImageJPEGRepresentation(images[i], 0.5);
[formData appendPartWithFileData:imageData name:@"upimage" fileName:[NSString stringWithFormat:@"image[%ld].jpg",(long)i] mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject){
NSLog(@"第%ld张上传成功",(long)i);
dispatch_group_leave(group);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"第%ld张上传失败",(long)i);
dispatch_group_leave(group);
}];
}
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
NSLog(@"全部上传完毕");
});
images是传过来的存放image的数组;
PHP端的代码,本人PHP研究阶段,只是单独的实现可接收图片,代码还不完善,希望大家多多发表自己的建议,你们的建议是我进步的动力;
$url = $_FILES["upimage"]["tmp_name"];
$name = $_FILES["upimage"]["name"];//拼接要作为服务器上保存的文件名字
$save_folder = $_SERVER['DOCUMENT_ROOT'].'/imagedownload/';
$newfname = $save_folder .$name;// 打开连接 rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。// 获取客户端上传到缓存文件夹下的文件
$file = fopen ($url, "rb");
if ($file) {
// a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件 存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。// 获取要把客户端传递过来的文件复制到新的文件夹下的名字
$newf = fopen ($newfname, "a");
if ($newf)
// 检查文件是否结束,如结束,则返回非零值
while(!feof($file)) {
// 开始从某个文件读取1MB 然后写入到新的路径1MB
fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
}}
if ($file) {
// 关闭文件链接
fclose($file);
}
if ($newf) {
fclose($newf);
}
运行代码后图片上传成功。