首先是iOS端代碼,導入AFNetworking后,可以用下面的方法實現(xiàn)上傳:
+ (void)uploadImageWithImage:(UIImage *)image pid:(NSString *)pid success:(void (^)(id responseObject))success failureHandler:(void(^)(NSError *error)) failure{
/*
此段代碼如果需要修改岸蜗,可以調整的位置
1. 把upload.php改成網(wǎng)站開發(fā)人員告知的地址
2. 把file改成網(wǎng)站開發(fā)人員告知的字段名
*/
//AFN3.0+基于封住HTPPSession的句柄
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
NSDictionary *dict = @{@"username":@"Saup"};
//formData: 專門用于拼接需要上傳的數(shù)據(jù),在此位置生成一個要上傳的數(shù)據(jù)體
[manager POST:[@"upload.php"] parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
NSData *data = UIImagePNGRepresentation(image);
// 在網(wǎng)絡開發(fā)中蜕琴,上傳文件時,是文件不允許被覆蓋柠掂,文件重名
// 要解決此問題涨颜,
// 可以在上傳時使用當前的系統(tǒng)事件作為文件名
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
// 設置時間格式
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDate date]];
NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
//上傳
/*
此方法參數(shù)
1. 要上傳的[二進制數(shù)據(jù)]
2. 對應網(wǎng)站上[upload.php中]處理文件的[字段"file"]
3. 要保存在服務器上的[文件名]
4. 上傳文件的[mimeType]
*/
[formData appendPartWithFileData:data name:@"file" fileName:fileName mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//上傳進度
// @property int64_t totalUnitCount; 需要下載文件的總大小
// @property int64_t completedUnitCount; 當前已經(jīng)下載的大小
//
// 給Progress添加監(jiān)聽 KVO
NSLog(@"%f",1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上傳成功 %@", responseObject);
params: dic sucesshander:success failurer:failure];
}else{
NSLog(@"%@",@"上傳失敗");
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上傳失敗 %@", error);
}];
}
PHP laravel 框架代碼:
public function savePic(Request $request){
if(!$request->hasFile('file')){
return $this->returnResponse(500,'上傳文件為空费韭!');//這是自己寫的返回信息方法,你可以根據(jù)自己的修改
}
$file = $request->file('file');
//判斷文件上傳過程中是否出錯
if(!$file->isValid()){
return $this->returnResponse(500,'文件上傳出錯庭瑰!');
}
$newFileName = md5(time().rand(0,10000)).'.'.$file->getClientOriginalExtension();
$savePath = 'upload/'.date('Y-m-d',time()).'pic/'.$newFileName;
$bytes = Storage::put(
$savePath,
file_get_contents($file->getRealPath())
);
if(!Storage::exists($savePath)){
return $this->returnResponse(500,'保存文件失斝浅帧!');
}
return $this->returnResponse(200,$savePath);
}
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者