日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很久沒發文了,最近這段時間在看前端的東西,在忙微商城webapp的事,用的vue2.0開發,打算過段時間記錄總結那方面的一些知識點和坑。下面進入今天的主題。

說到iOS上傳圖片,網上的資料滿滿皆是,分為兩大類。

1. 轉換為 base64位

2.轉換為二進制流

之前的項目里有個客訴的功能模塊需要用戶最多上傳4張圖片的需求,用的方法是第二種。在開發小程序之前,直接將多張圖片用for循環將每張圖片轉換為二進制流再一起上傳,一切都很正常。

代碼如下圖:

將圖片逐張轉化成二進制流再一起上傳.png

但在開發小程序版的此功能時發現,微信暫時不支持多張圖片同時上傳,這就讓人著實蛋疼一陣。沒辦法,為了同時適配APP端和微信端,后臺就改接口,由原來的一個接口變成了兩個接口,多出來的那個接口(暫且叫B接口)為單獨上傳圖片用的,每次只能上傳一張,上傳成功后返回一個關于上傳圖片的url,并存入到一個數組C中,而原來的接口(A接口)則不需要圖片,而是將投訴的內容以及B接口返回的url產生的數組C一起加在參數字典中post上傳即可了。可能到這你有點暈,下面先看下流程圖吧

圖片上傳流程圖.png

新建一個 imgUntil 類 ,代碼如下:

imgUntil.h文件

#import

#import

typedef void (^FinishUploadAllBlock)(NSMutableArray *imgUrls);//圖片上傳完成回調 將服務器返回的url存到數組并將數組返回

@interface ImgUntil : NSObject

/*

param:

photosArr:由原圖片數組copy過來的可變數組

desturls :圖片上傳成功后返回url存放用的數組并回調給controller

finish :block

controller :當前控制器

*/

+(void)synUploadAll:(NSMutableArray *)photosArr And:(NSMutableArray *)desturls finish:(FinishUploadAllBlock)finish inController:(UIViewController *)controller;

@end

imgUntil.m文件

#import "ImgUntil.h"

#import "UIView+Toast.h"

#import "AFNetworking.h"

#import "XSAPIManager.h"

#import "NetworkConstant.h"

#import "BaseModel.h"

#import "MBProgressHUD.h"

typedef void (^FinishCompressBlock)(UIImage *inFile);//圖片壓縮完成回調 將壓縮后的圖片返回

typedef void (^FinishUploadBlock)(NSString *imgUrl);//圖片上傳單張完成回調 將服務器返回的url存到數組并返回

@implementation ImgUntil

+(void)synUploadAll:(NSMutableArray *)photosArr And:(NSMutableArray *)desturls finish:(FinishUploadAllBlock)finish inController:(UIViewController *)controller{

if (photosArr.count>0) {

UIImage *image = photosArr[0];

[self compress:image finishCompress:^(UIImage *inFile) {//圖片壓縮成功回調處理

[self syncUploadImage:inFile finishUpload:^(NSString *imgUrl) {//圖片上傳成功回調處理

[photosArr removeObjectAtIndex:0];

[desturls addObject:imgUrl];

[self synUploadAll:photosArr And:desturls finish:finish inController:controller];//遞歸 直到數組中的圖片全都上傳完為止

} inController:controller];

}];

}else{

finish(desturls);

}

}

+(void)compress:(UIImage*)image finishCompress:(FinishCompressBlock)compress{

NSData *data= UIImageJPEGRepresentation(image,1);

NSLog(@"圖片大小%lu kb",data.length/1024);

if (data.length > 1024*1024) {//判斷圖片是否大于1M

NSLog(@"正在壓縮圖片");

NSUInteger maxLength = 1024*1024;

UIImage *resultImage = image;

NSData *data = UIImageJPEGRepresentation(resultImage, 1);

NSUInteger lastDataLength = 0;

while (data.length > maxLength && data.length != lastDataLength) {

lastDataLength = data.length;

CGFloat ratio = (CGFloat)maxLength / data.length;

CGSize size = CGSizeMake((NSUInteger)(resultImage.size.width * sqrtf(ratio)),

(NSUInteger)(resultImage.size.height * sqrtf(ratio)));

UIGraphicsBeginImageContext(size);

[resultImage drawInRect:CGRectMake(0, 0, size.width, size.height)];

resultImage = UIGraphicsGetImageFromCurrentImageContext();

UIGraphicsEndImageContext();

data = UIImageJPEGRepresentation(resultImage, 1);

NSLog(@"壓縮后圖片大小%lu kb",data.length/1024);

}

compress(resultImage);

}else{

compress(image);

}

}

+(void)syncUploadImage:(UIImage*)image finishUpload:(FinishUploadBlock)upload inController:(UIViewController *)controller{

[MBProgressHUD showHUDAddedTo:controller.view animated:YES];

NSLog(@"正在上傳圖片");

NSString *url = [NSString stringWithFormat:@"%@/images/uploadImgFile",host];

[[XSAPIManager manager] MemberPOST:url requestType:XSRequestTypeJSON parameters:nil constructingBodyWithBlock:^(id formData) {

NSData *data= UIImageJPEGRepresentation(image,1);

[formData appendPartWithFileData:data name:@"file" fileName:@"iosfile.jpg" mimeType:@"image/*"];

} success:^(id responseObject) {

NSLog(@"返回的url %@",responseObject);

BaseModel *model = [BaseModel mj_objectWithKeyValues:responseObject];

if (model.code==1) {

upload(responseObject[@"data"]);

}

[MBProgressHUD hideHUDForView:controller.view animated:YES];

} failure:^(NSError *error) {

[MBProgressHUD hideHUDForView:controller.view animated:YES];

} ];

}

@end

在controller中調用.h文件中的類方法即可。

以上!

總結

以上是生活随笔為你收集整理的ios 上传图片失败 小程序_iOS上传图片,就是有这种不一样的操作!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。