1. 程式人生 > >關於上傳手機本地圖片到網頁的問題

關於上傳手機本地圖片到網頁的問題

  故事背景:我們可以獲取到手機系統相簿裡面的圖片,並且可以把它轉化成UIImage *,至於本地圖片,直接可以根據圖片名字把它轉化成UIImage * 型別的,其比較簡單,在此不做說明。關鍵問題是,把這樣的型別,如何上傳到網頁?也就是變成一個可以點開的連結。在此,我利用第三方AFNetworking上傳。程式碼如下:

#import "AFNetworking.h"

@interfaceViewController ()<UIImagePickerControllerDelegate, UINavigationControllerDelegate> {

UIImageView

*_imageView;  // 設定一個接受圖片的控制元件

}

- (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

= [UIColorlightGrayColor];

    [button setTitle:@"相簿"forState:UIControlStateNormal];

    [button addTarget:selfaction:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];

    [self.viewaddSubview:button];

UIImageView *imageView = [[UIImageViewalloc] init];

    imageView.frame

= CGRectMake(200, 300, 200, 200);

    [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,結束。。。