ios開發(fā)上傳圖片,ios上傳圖片到服務(wù)器

iOS原生上傳圖片方案

(1)方式一

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出曲周免費做網(wǎng)站回饋大家。

(2)方式二

請求頭 (圖片來自Charles 4.5.6)

IOS開發(fā),上傳完圖片后,怎么獲取圖片的URL

移動端在圖片上傳完成后可以讓服務(wù)端將上傳成功的圖片的url返回給你

iOS上傳圖片大小保持在1M以內(nèi)

實際開發(fā)過程中很有可能會遇到一些比較麻煩的需求:這里就分享下上傳圖片的時候限制上傳的圖片的大小的問題,調(diào)用系統(tǒng)相冊以及調(diào)用照相機的實現(xiàn)我就不詳細說了,這里主要說一下壓縮圖片至1M以內(nèi)的實現(xiàn),順帶著將file進行base64轉(zhuǎn)碼的方法說一下,以下進入主題:

// 選中照片之后的回調(diào)方法

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info

{

// 先dismiss調(diào)選取照片的VC,在completion block里面完成以下幾個操作:

[self dismissViewControllerAnimated:YES completion:^{

UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

// 拍照存入相冊

if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {

UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);

}

// 判斷哪個視圖需要照片

UIImage *tempImage = nil;

NSString *imageName = nil;

// 這里注意下:如果有多個上傳圖片的選項,可以給每個選項設(shè)置一個類型,然后每個選項根據(jù)相應(yīng)的類型來設(shè)置不同的imageName即可.暫時我只設(shè)置一個值,如@"test.jpeg".

imageName = @"test.jpeg";

// 這里:如果有多個上傳圖片的選項,且給每個選項設(shè)置一個類型,這時就可以根據(jù)imageName的值的不同,寫入本地之后返回的image值也就不同..

// 將返回的本地的圖片賦值給tempImage

tempImage = [self writeToCachesWithImage:image imageName:imageName];

// 下面就是調(diào)用你自己的上傳圖片的網(wǎng)絡(luò)請求了,這是我的網(wǎng)絡(luò)請求封裝的方法....

[self uploadImageWithImage:tempImage imageName:imageName];

}];

}

// 把上傳需要的圖片轉(zhuǎn)為字符串

- (NSData *)stringWithImage:(UIImage *)image imageName:(NSString *)imageName

{

NSString *imagePath = [[self postImagePathWithFileName:certificationFileName] stringByAppendingPathComponent:imageName];

NSData *imageData = nil;

CGFloat mb = 1.0; // 1MB

CGFloat uploadMB = 1.0; // 1M

CGFloat itemMB = 0; // 把文件轉(zhuǎn)成MB

if ([[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {

long long imageSize = [[[NSFileManager defaultManager] attributesOfItemAtPath:imagePath error:nil] fileSize];

itemMB = imageSize / (mb * 1024 * 1024) ;

} else {

CGImageRef cgImageRef = image.CGImage;

size_t bpp = CGImageGetBitsPerPixel(cgImageRef);

size_t bpc = CGImageGetBitsPerComponent(cgImageRef);

size_t bytes_per_pixel = bpp / bpc;

CGFloat lPixelsPerMB = mb / bytes_per_pixel;

CGFloat totalPixel = CGImageGetWidth(cgImageRef) * CGImageGetHeight(cgImageRef);

itemMB = totalPixel / lPixelsPerMB;

}

if (itemMB = uploadMB) {

imageData = UIImageJPEGRepresentation(image, 1.0f);

} else {

// 大于1M壓到1M

CGSize imageSize = image.size;

CGSize toImageSize = CGSizeZero;

if (imageSize.width imageSize.height) {

toImageSize = CGSizeMake(1024, 1024 * imageSize.height / imageSize.width);

} else if (imageSize.width imageSize.height) {

toImageSize = CGSizeMake(1024 * imageSize.width / imageSize.height, 1024);

} else {

toImageSize = CGSizeMake(sqrt(1048576), sqrt(1048576));

}

UIImage *toImage = [image imageCompressForSize:image targetSize:toImageSize];

imageData = UIImageJPEGRepresentation(toImage, 1.f);

}

// 這里注意下:根據(jù)你們自己的需要轉(zhuǎn)成不同類型的NSData字節(jié)流...

// 這是不用base64轉(zhuǎn)碼返回的string

return imageData;

// 這是用base64轉(zhuǎn)碼返回的string,1.0上傳的方式

// ? ?Byte *byte = (Byte *)[imageData bytes];

// ? ?return [NSString stringWithFormat:@"jpeg@%@", [GTMBase64 stringByEncodingBytes:byte length:imageData.length]];

}

/* 上傳的圖片所在的沙盒文件夾

* @param : fileName 文件的名稱.

* @param : return 文件的存儲路徑

*/

- (NSString *)postImagePathWithFileName:(NSString *)fileName

{

NSString *imagePath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:fileName];

if (![[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {

[[NSFileManager defaultManager] createDirectoryAtPath:imagePath withIntermediateDirectories:YES attributes:nil error:nil];

}

return imagePath;

}

/*

* 把圖片存入本地并返回

* @param : image 選中的image

* @param : imageName 圖片的名稱

* @return : UIImage

*/

- (UIImage *)writeToCachesWithImage:(UIImage *)image imageName:(NSString *)imageName

{

NSString *imagePath = [[self postImagePathWithFileName:certificationFileName] stringByAppendingPathComponent:imageName];

BOOL isResult = [UIImageJPEGRepresentation(image, 1.0f) writeToFile:imagePath atomically:YES];

if (isResult) {

// 寫入成功,把圖片取出來

UIImage *certificationImage = [UIImage imageWithContentsOfFile:imagePath];

return certificationImage;

} else {

// 寫入失敗,直接返回原始圖片

return image;

}

}

ios用asi怎么上傳系統(tǒng)相冊照片

1.新建一個single view工程,導(dǎo)入ASIHttpRequest庫,導(dǎo)入MobileCoreServices、CFNetwork、SystemConfiguration和libz1.2.5.dylib四個系統(tǒng)庫

2.隨便導(dǎo)入一張圖片,比如haoyou.png

3.ViewController.h

#import uikit uikit.h=""

#import "ASIHTTPRequest.h"

#import "ASIFormDataRequest.h"

@interface ViewController : UIViewController

@property (nonatomic, copy)NSString *m_auth;

@end/asihttprequestdelegate/uikit

4.ViewController.m 添加兩個按鈕

(void)viewDidLoad {

[super viewDidLoad];

UIButton *loginBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

loginBtn.frame = CGRectMake(100, 20, 120, 40);

[loginBtn setTitle:@"登錄" forState:UIControlStateNormal];

[loginBtn addTarget:self action:@selector(login) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:loginBtn];

UIButton *uploadBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

uploadBtn.frame = CGRectMake(100, 80, 120, 40);

[uploadBtn setTitle:@"上傳" forState:UIControlStateNormal];

[uploadBtn addTarget:self action:@selector(upload) forControlEvents:UIControlEventTouchUpInside];

[self.view addSubview:uploadBtn];

}

5.實現(xiàn)login和upload兩個方法

- (void)login {

NSURL *url = [NSURL URLWithString:@"..."];//此處省略請求url

//請求

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

request.tag = 10;

request.delegate = self;

[request startAsynchronous];

}

- (void)upload {

NSURL* url = [NSURL URLWithString:@"..."];//此處省略請求url

UIImage* img = [UIImage imageNamed:@"haoyou.png"];

NSData* data = UIImagePNGRepresentation(img);

//ASIFormDataRequest請求是post請求,可以查看其源碼

ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:url];

request.tag = 20;

request.delegate = self;

[request setPostValue:self.m_auth forKey:@"m_auth"];

// [request setFile:@"tabbar.png" forKey:@"haoyou"];//如果有路徑,上傳文件

[request setData:data withFileName:@"tmp.png" andContentType:@"image/png" forKey:@"headimage"];

// 數(shù)據(jù) 文件名,隨便起 文件類型 設(shè)置key

[request startAsynchronous];

}

6.實現(xiàn)協(xié)議

- (void)requestFailed:(ASIHTTPRequest *)request {

NSLog(@"請求失敗");

}

- (void)requestFinished:(ASIHTTPRequest *)request {

if (request.tag == 10) {

NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:request.responseData options:0 error:nil];

self.m_auth = [dic objectForKey:@"m_auth"];

NSLog(@"%@", self.m_auth);

}

if (request.tag == 20) {

NSLog(@"%@", request.responseString);

}

}

網(wǎng)站標題:ios開發(fā)上傳圖片,ios上傳圖片到服務(wù)器
鏈接分享:http://muchs.cn/article22/phigcc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器外貿(mào)網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計、商城網(wǎng)站面包屑導(dǎo)航、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作