關於上傳手機本地圖片到網頁的問題
故事背景:我們可以獲取到手機系統相簿裡面的圖片,並且可以把它轉化成UIImage *,至於本地圖片,直接可以根據圖片名字把它轉化成UIImage * 型別的,其比較簡單,在此不做說明。關鍵問題是,把這樣的型別,如何上傳到網頁?也就是變成一個可以點開的連結。在此,我利用第三方AFNetworking上傳。程式碼如下:
#import "AFNetworking.h"
@interfaceViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
UIImageView
}
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// 建立控制元件 觸發效果
UIButton *button = [UIButtonbuttonWithType:UIButtonTypeSystem];
button.frame = CGRectMake(100, 100, 100, 100);
button.backgroundColor
[button setTitle:@"相簿"forState:UIControlStateNormal];
[button addTarget:selfaction:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:button];
UIImageView *imageView = [[UIImageViewalloc] init];
imageView.frame
[self.viewaddSubview:imageView];
_imageView = imageView;
}
// 按鈕點選事件
- (void)buttonClick {
// 1.判斷是否可用
if (![UIImagePickerControllerisSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
return;
}
// 2. 建立圖片選擇控制器
UIImagePickerController *ipc = [[UIImagePickerControlleralloc] init];
// 3. 設定開啟照片相簿型別(顯示所有相簿)
ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
ipc.delegate = self;
[selfpresentViewController:ipc animated:YEScompletion:nil];
}
// 獲取圖片後的操作
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
// 設定圖片
UIImage *image = info[UIImagePickerControllerOriginalImage];
_imageView.image = image;
// 銷燬控制器
[picker dismissViewControllerAnimated:YEScompletion:nil];
// 上傳圖片的方法
[selfuploadImageWithImage:image];
}
// 上傳圖片的方法
- (void)uploadImageWithImage:(UIImage *)image {
AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];
// 上傳圖片時候用到的URLStr 這個是上傳圖片到網頁用到的介面上的連結
NSString *imageUrlStr = @"http://58.51.146.24/jfinalbbs/file/upload_pic";
manager.responseSerializer.acceptableContentTypes = [NSSetsetWithObjects:@"text/html",@"application/json", nil];
[manager POST:imageUrlStr parameters:nilconstructingBodyWithBlock:^(id_Nonnull formData) {
NSData *imageData = UIImageJPEGRepresentation(image, 0.1);
NSDateFormatter *formatter = [[NSDateFormatteralloc] init];
formatter.dateFormat = @"yyyyMMddHHmmss";
NSString *str = [formatter stringFromDate:[NSDatedate]];
NSString *fileName = [NSStringstringWithFormat:@"%@.jpg", str];
///////////////////////////////////////// name 就是我們要傳的引數名字(file_upload)
[formData appendPartWithFileData:imageData name:@"file_upload"fileName:fileName mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask * _Nonnull task, id_Nullable responseObject) {
//NSLog(@"responseObject = %@, task = %@",responseObject,task);
// subUrl 是伺服器給我們返回的連結後面的一小部分
NSString *subUrl = responseObject[@"url"];
//最終轉化成功的圖片連結要在前面拼接上公司的資訊,這個伺服器人員說的算
NSString *needURL = [NSStringstringWithFormat:@"http://idongtian.com/jfinalbbs%@",subUrl];
// 最後把這個轉化成功的連結打印出來,複製到網頁上面,是不是可以開啟看到上傳的圖片了,有沒有小興奮呢
NSLog(@"%@",needURL);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"error = %@",error);
}];
}
在此,一切完畢,OK,結束。。。