今天翻了翻原來的項目,突然發現之前自己寫多圖上傳那部分有些亂,整理了一下,寫篇博文記錄一下,順便驗證一下最近自己寫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);
}
Snip20170108_3.png
運行代碼后圖片上傳成功。?