美文网首页
iOS 阿里云服务器图片上传

iOS 阿里云服务器图片上传

作者: 安静就好_ | 来源:发表于2018-01-12 20:51 被阅读2414次

1.首先集成阿里云的SDK,建议CocoaPods直接导入,不然太坑了。。。
我是直接引入OSS iOS SDK框架,也就是这个(按文档走,需要自己打包生成,下面介绍)

5802D16E-8CB4-4EC2-A006-967CA8376ABD.png

2.SDK集成之后,就可以敲代码了

先把核心代码贴出来

//初始化(AccessKey   SecretKey  这个都知道吧)
id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey                                                                                                            secretKey:SecretKey];

//AliYunHost(http://oss-cn-hangzhou.aliyuncs.com)就是域名访问
OSSClient *client = [[OSSClient alloc] initWithEndpoint:AliYunHost credentialProvider:credential];

//任务执行
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
//阿里云控制台-对象存储OSS下你所要存储的Bucket的名称
put.bucketName = BucketName;

//存储路径以及图片保存的名称
NSString *imageName = [kTempFolder stringByAppendingPathComponent:[[NSUUID UUID].UUIDString stringByAppendingString:@".jpg"]];
put.objectKey = imageName;

//设置上传文件格式(告诉浏览器这是图片,不然默认的是下载)
put.contentType = @"image/jpeg";

 //上传date(上传之后直接就是照片格式)
NSData *data = UIImageJPEGRepresentation(image, 0.3);
put.uploadingData = data;

// 阻塞直到上传完成
OSSTask * putTask = [client putObject:put];
[putTask waitUntilFinished]; 

//上传成功或者失败
if (!putTask.error) {
       NSLog(@"upload object success!");
    } else {
     NSLog(@"upload object failed, error: %@" , putTask.error);
    }

3.接下来把我的上传图片的类贴出来
.h文件

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

typedef NS_ENUM(NSInteger, UploadImageState) {
    UploadImageFailed   = 0,
    UploadImageSuccess  = 1
};

@interface OSSImageUploader : NSObject

+ (void)asyncUploadImage:(UIImage *)image complete:(void(^)(NSArray<NSString *> *names,UploadImageState state))complete;

+ (void)syncUploadImage:(UIImage *)image complete:(void(^)(NSArray<NSString *> *names,UploadImageState state))complete;

+ (void)asyncUploadImages:(NSArray<UIImage *> *)images complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete;

+ (void)syncUploadImages:(NSArray<UIImage *> *)images complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete;

@end

.m文件

#import "OSSImageUploader.h"
#import <AliyunOSSiOS/OSSService.h>

@implementation OSSImageUploader
需要的一些基本信息
static NSString *const AccessKey = @"";
static NSString *const SecretKey = @"";
static NSString *const BucketName = @"";
static NSString *const AliYunHost = @"";
static NSString *kTempFolder = @"";

+ (void)asyncUploadImage:(UIImage *)image complete:(void(^)(NSArray<NSString *> *names,UploadImageState state))complete
{
    [self uploadImages:@[image] isAsync:YES complete:complete];
}

+ (void)syncUploadImage:(UIImage *)image complete:(void(^)(NSArray<NSString *> *names,UploadImageState state))complete
{
    [self uploadImages:@[image] isAsync:NO complete:complete];
}

+ (void)asyncUploadImages:(NSArray<UIImage *> *)images complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete
{
    [self uploadImages:images isAsync:YES complete:complete];
}

+ (void)syncUploadImages:(NSArray<UIImage *> *)images complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete
{
    [self uploadImages:images isAsync:NO complete:complete];
}

+ (void)uploadImages:(NSArray<UIImage *> *)images isAsync:(BOOL)isAsync complete:(void(^)(NSArray<NSString *> *names, UploadImageState state))complete
{
    id<OSSCredentialProvider> credential = [[OSSPlainTextAKSKPairCredentialProvider alloc] initWithPlainTextAccessKey:AccessKey                                                                                                            secretKey:SecretKey];

    OSSClient *client = [[OSSClient alloc] initWithEndpoint:AliYunHost credentialProvider:credential];
    
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    queue.maxConcurrentOperationCount = images.count;
    
    NSMutableArray *callBackNames = [NSMutableArray array];
    int i = 0;
    for (UIImage *image in images) {
        if (image) {
            NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
                //任务执行
                OSSPutObjectRequest * put = [OSSPutObjectRequest new];
                put.bucketName = BucketName;

                //文件路径及名称拼接
                NSString *imageName = [kTempFolder stringByAppendingPathComponent:[[NSUUID UUID].UUIDString stringByAppendingString:@".jpg"]];               
                put.objectKey = imageName;
                put.contentType = @"image/jpeg";
                //添加到数组回传
                [callBackNames addObject:imageName];

                //上传date
                NSData *data = UIImageJPEGRepresentation(image, 0.3);
                put.uploadingData = data;
                // 阻塞直到上传完成
                OSSTask * putTask = [client putObject:put];
                [putTask waitUntilFinished]; 
                if (!putTask.error) {
                    NSLog(@"upload object success!");
                } else {
                    NSLog(@"upload object failed, error: %@" , putTask.error);
                }
                if (isAsync) {
                    if (image == images.lastObject) {
                        NSLog(@"upload object finished!");
                        if (complete) {
                            complete([NSArray arrayWithArray:callBackNames] ,UploadImageSuccess);
                        }
                    }
                }
            }];
            if (queue.operations.count != 0) {
                [operation addDependency:queue.operations.lastObject];
            }
            [queue addOperation:operation];
        }
        i++;
    }
    if (!isAsync) {
        [queue waitUntilAllOperationsAreFinished];
        NSLog(@"haha");
        if (complete) {
            if (complete) {
                complete([NSArray arrayWithArray:callBackNames], UploadImageSuccess);
            }
        }
    }
}

4.下面说一下,在我克隆下来SDK,打包AliyunOSSiOS.framework文件遇到的问题


C0F2DCA7-3328-431A-99B5-15934595E7DB.png

不仅有中文,路径也有问题,最好去这里拷贝一下


AC086788-BB42-41C7-AC31-CF76661796A8.png

然后运行包装脚本

sh ./buildFramework.sh

输入将生成AliyunOSSiOS.framework的生成包装目录

cd Products && ls

然后去你自己指定的目录下,把生成的AliyunOSSiOS.framework的生成包,拽进工程。

希望可以帮助到你!!加油!!

参考文章

相关文章

  • 阿里云(I)

    参考资料:iOS 阿里云服务器图片上传iOS录制(或选择)视频,压缩、上传(整理)视频 拍摄 与压缩 阿里云OSS...

  • 基于springboot的文件上传

    文件上传方式 直接上传到应用服务器 上传到oss(阿里云,七牛云) 前端将图片转成Base64编码上传 上传服务器...

  • 图片上传

    图片上传 获取阿里云接口 图片上传到阿里云 图片预览接口post http://113.108.139.178:1...

  • 6.基于SpringBoot的文件上传

    上传方式: 直接上传到应用服务器 上传到css(阿里云、七牛云) 前端将图片转成Base64编码上传 http:/...

  • 基于SpringBoot的文件上传

    上传方式: 直接上传到应用服务器 上传到css(阿里云、七牛云) 前端将图片转成Base64编码上传 http:/...

  • 基于SpringBoot的文件上传

    方式: 直接上传到应用服务器 上传到OSS(阿里云、七牛云) 前端将图片转成Base64编码上传

  • iOS 阿里云服务器图片上传

    1.首先集成阿里云的SDK,建议CocoaPods直接导入,不然太坑了。。。我是直接引入OSS iOS SDK框架...

  • 基于SpringBoot的文件上传

    上传方式 直接上传到应用服务器 上传到css(阿里云 七牛云 前端将图片转成Base64编码上传image.png

  • 笔记3

    1、基于SpringBoot的文件上传 直接上传到应用服务器 上传到OSS(阿里云、七牛云) 前段将图片转成Bas...

  • 无标题文章

    iOS 上传图片到服务器 1.单张图片上传 //上传图片(单张)+(void)uploadPhotoAndCont...

网友评论

      本文标题:iOS 阿里云服务器图片上传

      本文链接:https://www.haomeiwen.com/subject/jrxqoxtx.html