对象存储OSS-iOS

2023-10-27

文章目录

对象存储OSS-iOS

这里主要调研了一下文件上传

文档地址

常见问题

使用前请确保先开通的OSS服务,并创建一个Bucket。

一、基础解读

1、相关名词

Bucket 存储空间

Region 地域

Endpoint 访问域名

AccessKey 简称AK,指的是访问身份验证中用到的 AccessKeyId 和 AccessKeySecret

2、OSS的上传和下载

  • OSS提供了多种类型的上传文件的方法,如使用单次PUT请求完成的简单上传,使用网页表单直接上传的表单上传,用于大文件上传的分片上传,以及适用于视频监控等领域的追加上传。

  • 同样也可以使用多种方法从OSS下载文件,如简单下载和下载大文件的断点续传下载。

3、基于SDK快速开始

1、开通OSS后,从控制台上获取AccessKeyId和AccessKeySecret

2、下载各种开发语言SDK

3、根据SDK的文档描述,完成上传、下载文件等操作

一般的客户端的AccessKeyId和AccessKeySecret我们通过请求AppServer来获取。

4、基于OSS的移动开发

文档地址

文档中有个流程图画的特别明确而且有很有想法。

4.1 整体流程

4.1.1、客户端申请STS凭证

客户端请求AppServer,从AppServer获取上传需要的AccessKeyId和AccessKeySecret等信息

4.1.2、AppServer请求AssumeRole

服务器请求AssumeRole,是阿里的一个服务,也别管它是什么了,对客户端来说没意义。

这个服务里进行鉴定等安全验证的操作,可能还有其他吧。

4.1.3、AssumeRole返回STS凭证

STS凭证,即使用STS方式上传文件所需要的AccessKeyId和AccessKeySecret等信息。

4.1.4、AppServer返回STS到客户端

最终将STS信息返回到客户端。

4.1.5、客户端使用STS授权信息上传文件

客户端调用对应的SDK,使用SDK的Api,上传文件到AssumeRole。

这里是直接上传到阿里的AssumeRole服务里,AssumeRole将文件存储到OSS对应的Bucket下。

4.1.6、AssumeRole返回上传结果到客户端

AssumeRole将上传结果返回到SDK,通过SDK返回到客户端的App上。

4.2 简化流程

对于客户端来说,简化一下流程是有必要的,因为多余的我们不用关心。

4.2.1、请求AppServer获取STS权限

获取AccessKeyId和AccessKeySecret等信息。

4.2.2、将STS授权信息通过OSS SDK设置到SDK里

设置了才能有权限访问上传的Api

4.2.3、调用OSS SDK进行文件上传,SDK返回结果等回调

5、注意

5.1 关于授权

客户端不需要每次都向应用服务器请求授权,在第一次授权完成之后可以缓存STS返回的临时凭证直到超过失效时间。

5.2 iOS13视频上传

上传会报错,具体解决办法请看参考

二、对象存储-iOS

文档地址

1、基本流程

1.1 集成SDK

需要引入的系统库有:libresolve.tbd,libresolve.9.tbd,CoreText.framework,MobileCoreServices.framework,SystermConfiguration.framework,libz.tbd

哪些库不需要自己试试吧。

1.2 引入头文件

#import <AliyunOSSiOS/OSSService.h>

1.3 尝试初始化OSSClient

从AppServer获取Bucket等信息,用于初始化OSSClient

[VHUploaderClient requestUploadAuthKeyWithToken:accessToken success:^(id  _Nullable responseObject) {
    
    OSSStsTokenCredentialProvider *credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:responseObject[@"stsArr"][@"AccessKeyId"] secretKeyId:responseObject[@"stsArr"][@"AccessKeySecret"] securityToken:responseObject[@"stsArr"][@"SecurityToken"]];
    
    self.client = [[OSSClient alloc] initWithEndpoint:kEndPoint credentialProvider:credential];

    self.bucketName = responseObject[@"oss_bucket"];
    
} failure:^(NSError *error) {
    
}];

1.4 上传

OSSPutObjectRequest * put = [[OSSPutObjectRequest alloc] init];
// 必填字段
put.bucketName = self.bucketName;
put.objectKey = @"测试视频";
put.uploadingFileURL = [NSURL fileURLWithPath:filePath];
// put.uploadingData = <NSData *>; // 直接上传NSData
// 可选字段,可不设置
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    // 当前上传段长度、当前已经上传总长度、一共需要上传的总长度
    NSLog(@"uploadProgress %lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};

// 以下可选字段的含义参考: https://docs.aliyun.com/#/pub/oss/api-reference/object&PutObject
//put.contentType = @"";
// put.contentMd5 = @"";
// put.contentEncoding = @"";
// put.contentDisposition = @"";
//put.objectMeta = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"value1", @"x-oss-meta-name1", nil];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // 可以在上传时设置元信息或者其他HTTP头部
    OSSTask * putTask = [self.client putObject:put];
    [putTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            NSLog(@"upload object success!");
        } else {
            NSLog(@"upload object failed, error: %@" , task.error);
        }
        return nil;
    }];
});

2、遇到一些问题

2.1 名词解释

  • 关于endPoint

从AppServer请求到bucket后,看一下bucket信息,对照阿里云文档上的bucket对应的endPoint,如果是北京,endPoint是http://oss-cn-beijing.aliyuncs.com。

  • Bucket 上绑定 CNAME是什么意思

  • 构建OSSCredentialProvider时,文档上说的”应用服务器地址“是什么?

就是自己请求token的服务器地址。

  • 文件上传的bucketName是什么?

    就是文件名,它决定了你的文件上传后在阿里云的存储路径。

  • 文件上传的objectKey是什么?

    文件名称

2.2 项目问题

2.2.1 crash:[__NSDictionaryM oss_setObject:forKey:]: unrecognized selector sent to instance

OSSHttpHeaderXOSSCallback为空导致字典闪退。

解决办法:xcode的Build Setting - Other Lingk Flag 添加的 -ObjC 。

2.2.2 crash:-[OSSFederationCredentialProvider getToken:](self=<unavailable>

使用OSSFederationCredentialProvider上传闪退,使用OSSStsTokenCredentialProvider上传成功。

2.2.3 error Code=-403 Access denied by authorizer's policy

权限问题,见OSS常见403错误的描述及排查解决方法

临时用户访问无权限,该临时用户角色扮演指定授权策略,该授权策略无权限。

我的项目里是因为传送文件的时候传到Buckrt的根目录了,问了下运维说是没有权限的,只能传到xx目录下,怎么办呢?

我们不是要向AppServer请求STS授权信息吗,让接口加一个字段,把需要传到的目录给我们,我们只需在上传你的时候设置文件名为 ”文件目录/文件名“即可。

put.objectKey = @"demand/测试视频";//demand是需要将文件传到的目录,不设置的话是默认传到Bucket的根目录,很可能是没权限,报403。
2.2.4 发问:上传过程中token过期了会怎么样,怎么知道token过期

问题:
1、STS授权每次上传都需要设置一下token吗?

2、上传过程中token过期了会怎么样,会暂停上传吗?有么有什么回调?

3、怎么知道token过期,有么有什么信息回调?怎么监控token是不是过期了?

回复:
问题1、不需要,只用确保您本次上传时候用的那个STS的信息没有过期即可

问题2、如果是普通上传(putObject这种),我们只会在刚开始传第一个包的时候,验证请求的有效性,持续上传过程中,不会反复验证;所以要么是刚开始就报错了,要么是整个文件传完了。
如果是分片上传,因为每一个分片都是一个独立的http请求,所以每一次独立的http请求时候都会验证STS有效性,此时中间某个分片上传时候STS验证超时了,那么后续的上传都会失败,已经上传的文件会以碎片形式存在于OSS的碎片管理中(OSS控制台上可以看下),后续也可以利用断点方式去续传(传入新的不过期的STS即可)(断点方式:https://help.aliyun.com/document_detail/32063.html?spm=a2c4g.11186623.6.1133.2ec728129Mmuho)

问题3、OSS服务端会去校验STS的有效性,这个没有消息回调的,您再生成STS的时候,其中STS里面会返回一个ExpireTime,这个就是表示未来过了这个时间点就过期了,您可以监控当前时间与返回的这个ExpireTime的差值

2.2.5 request的callbackParam怎么用
    OSSPutObjectRequest *put = [[OSSPutObjectRequest alloc] init];
    //必填字段
    put.bucketName = self.bucketName;
    put.objectKey = [NSString stringWithFormat:@"demand/%@",fileName];
    put.uploadingFileURL = [NSURL fileURLWithPath:filePath];
    put.callbackParam = @{@"key":@"value",
                          @"key":@"value"
                          }
    //可选字段,可不设置
    put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
        if (progressBlock) {
            dispatch_async(dispatch_get_main_queue(), ^{
                progressBlock(bytesSent,totalByteSent,totalBytesExpectedToSend);
            });
        }
    };

自定义字典,key value可以自己传入,上传结果的地方会返回。

2.2.6 token刷新怎么设置

我使用的是OSSStsTokenCredentialProvider来创建client对象的,当token过期后怎么刷新?直接设置到credential里面吗?

OSSStsTokenCredentialProvider *credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:secretToken];
self.client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

credential对象里有这几个属性:

@property (nonatomic, copy) NSString * accessKeyId;
@property (nonatomic, copy) NSString * secretKeyId;
@property (nonatomic, copy) NSString * securityToken;

问:
问题描述 : 您好,我有以下业务问题需要咨询,希望贵方能给出意见或者建议

问题:当有效期到之前,我重新从AppServer获取最新的STS授权信息,我怎么讲最新的token设置到OSS里?

我使用的是这种方式创建的client对象:

OSSStsTokenCredentialProvider *credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:secretToken];
self.client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

我看credential对象内部有这几个属性:

@property (nonatomic, copy) NSString * accessKeyId;
@property (nonatomic, copy) NSString * secretKeyId;
@property (nonatomic, copy) NSString * securityToken;

我是需要将credential保存全局的对象,刷新的时候直接set对应的accessKeyId、secretKeyId和securityToken吗?

还是有其他更加合理的做法呢?

答:
在您判断到Token即将过期时,您可以重新构造新的OSSClient,也可以通过如下方式更新CredentialProvider:
id credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:@"<StsToken.AccessKeyId>" secretKeyId:@"<StsToken.SecretKeyId>" securityToken:@"<StsToken.SecurityToken>"];
client = [[OSSClient alloc] initWithEndpoint:endpoint credentialProvider:credential];

可以参考下文档说明;https://help.aliyun.com/document_detail/32059.html?spm=a2c4g.11186623.6.1149.2e88242eCDvrmL

更新token这样处理吧,OSS SDK里面已经帮用户考虑和设计的很好了。

id<OSSCredentialProvider> credential2 = [[OSSFederationCredentialProvider alloc] initWithFederationTokenGetter:^OSSFederationToken * {
    // 构造请求访问您的业务server
    NSURL * url = [NSURL URLWithString:@"http://localhost:8080/distribute-token.json"];
    NSURLRequest * request = [NSURLRequest requestWithURL:url];
    OSSTaskCompletionSource * tcs = [OSSTaskCompletionSource taskCompletionSource];
    NSURLSession * session = [NSURLSession sharedSession];
    // 发送请求
    NSURLSessionTask * sessionTask = [session dataTaskWithRequest:request
                                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                    if (error) {
                                                        [tcs setError:error];
                                                        return;
                                                    }
                                                    [tcs setResult:data];
                                                }];
    [sessionTask resume];
    // 需要阻塞等待请求返回
    [tcs.task waitUntilFinished];
    // 解析结果
    if (tcs.task.error) {
        NSLog(@"get token error: %@", tcs.task.error);
        return nil;
    } else {
        // 返回数据是json格式,需要解析得到token的各个字段
        NSDictionary * object = [NSJSONSerialization JSONObjectWithData:tcs.task.result
                                                                options:kNilOptions
                                                                  error:nil];
        OSSFederationToken * token = [OSSFederationToken new];
        token.tAccessKey = [object objectForKey:@"AccessKeyId"];
        token.tSecretKey = [object objectForKey:@"AccessKeySecret"];
        token.tToken = [object objectForKey:@"SecurityToken"];
        token.expirationTimeInGMTFormat = [object objectForKey:@"Expiration"];
        NSLog(@"get token: %@", token);
        return token;
    }
}];
2.2.7 为什么建议将client对象保存全局单例中,目的是什么?

提交了工单,阿里的回复是:“为了避免对共享资源的多重占用,可以节约系统资源 ,防止内存溢出等”。

2.2.8 上传时设置 Content-Type 和开启校验 MD5的目的是什么?

2.3 注意事项

1、OSS SDK里面使用了分类,所以别忘了在项目的Other Link Flag处添加-Objc。

2、如果已经存在同名的Object,并且有访问权限,则新添加的文件将覆盖原来的文件。

3、上传文件

3.1、简单上传

上传本地文件或者内存中的文件。

先去自己服务器请求STS授权信息,然后初始化OSSClient对象,然后添加文件上传。

请求STS信息是个异步的,如果未请求到STS信息就调用了上传,肯定会报错,OSSClient的初始化需要传入STS的授权信息

OSSStsTokenCredentialProvider *credential = [[OSSStsTokenCredentialProvider alloc] initWithAccessKeyId:accessKeyId secretKeyId:accessKeySecret securityToken:secretToken];
self.client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

OSSStsTokenCredentialProvider这个类在iOS文档中不推荐使用,但是能用。

推荐使用

NSString *endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 由阿里云颁发的AccessKeyId/AccessKeySecret构造一个CredentialProvider。
// 推荐使用OSSAuthCredentialProvider,token过期后会自动刷新。
id<OSSCredentialProvider> credential = [[OSSAuthCredentialProvider alloc] initWithAuthServerUrl:@"应用服务器地址,例如http://abc.com:8080"];
client = [[OSSClient alloc] initWithEndpoint:endPoint credentialProvider:credential];

但是这种绝对大多数情况下都是不实用的,因为我们自己请求自己的AppServer端需要验签,传公参数等,并不是一个url就能去请求的,如果只是一个url就能请求STS的授权信息,那别人把url拿去不就可以乱往阿里云上传文件了吗。

还是阿里的考虑是我理解错误了?可能是我理解错误,我经常理解有问题。

看到后面果然是我理解的错误,阿里的这种做法真的很好,很为用户考虑。如果不明白请看2.2.6 token刷新怎么设置。

3.2、分片上传

文件较大时,可以使用分片上传

这里是有关分片上传的 对象存储OSS-分片上传

3.3、追加上传

3.4、断点续传

支持并发上传、自定义分片大小。大文件上传推荐使用断点续传。


未完成


三、可能会用到的一些方法

//获取文件大小
- (unsigned long long)getSizeWithFilePath:(nonnull NSString *)filePath error:(NSError **)error
{
    NSFileManager *fm = [NSFileManager defaultManager];
    NSDictionary *attributes = [fm attributesOfItemAtPath:filePath error:error];
    return attributes.fileSize;
}
//获取当前时间时间戳
+ (NSString *)getTimeStamp {
    NSDate *current = [NSDate date];
    NSTimeInterval timestamp = [current timeIntervalSince1970];
    return [NSString stringWithFormat:@"%ld", (NSInteger)timestamp];
}
/**
 UTC, standard ISO8601, formate YYYY-MM-DDThh:mm:ssZ

 @return UTC time string
 */
+ (NSString *)get8601UTC {

    NSDate *date = [NSDate date];

    NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    formatter.dateFormat = @"YYYY-MM-dd hh:mm:ss";
    formatter.timeZone = timeZone;

    NSString *UTCTime = [formatter stringFromDate:date];
    NSString *formateUTC = [[UTCTime stringByReplacingOccurrencesOfString:@" " withString:@"T"] stringByAppendingString:@"Z"];

    return formateUTC;
}
//判断时间是否过有效期
- (BOOL)reloadOSSTokenIfNeed
{
    NSDate * expirationDate = [NSDate dateWithTimeIntervalSince1970:(NSTimeInterval)(self.federationToken.expirationTimeInMilliSecond / 1000)];
    NSTimeInterval interval = [expirationDate timeIntervalSinceDate:[NSDate oss_clockSkewFixedDate]];
    /* if this token will be expired after less than 2min, we abort it in case of when request arrived oss server,
     it's expired already. */
    if (interval < 10 * 60) {
        OSSLogDebug(@"get federation token, but after %lf second it would be expired", interval);
        return YES;
    }
    return NO;
}

//读取文件路径下的文件

- (NSData *)fileData:(NSString *)filePath {
    NSError *readError;
    NSFileHandle *fileHande = [NSFileHandle fileHandleForReadingFromURL:[NSURL URLWithString:filePath] error:&readError];
    if (!readError) {
        return [fileHande readDataToEndOfFile];
    }
    return nil;
}

//读取指定的分片文件

//每个分片的大小 文件大小/分片数
uint64_t offset = uplodFile.totalBytes / chuckCount;
NSFileHandle* readHandle = [NSFileHandle fileHandleForReadingAtPath:filePath];
[readHandle seekToFileOffset:offset * (i -1)];

NSData* data = [readHandle readDataOfLength:offset];
uploadPart.uploadPartData = data;

MD5

#import <CommonCrypto/CommonDigest.h>
//MD5
+ (NSString *)md5:(NSString *)string {
    const char * original_str = [string UTF8String];
    unsigned char digist[CC_MD5_DIGEST_LENGTH];
    CC_MD5(original_str, (uint)strlen(original_str), digist);
    NSMutableString* outPutStr = [NSMutableString stringWithCapacity:10];
    for(int  i =0; i<CC_MD5_DIGEST_LENGTH;i++){
        [outPutStr appendFormat:@"%02x", digist[i]];
    }
    return [outPutStr lowercaseString];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对象存储OSS-iOS 的相关文章

  • SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    该项目源码地址 xff1a https github com ggb2312 JavaNotes tree master springboot integration examples xff08 其中包含SpringBoot和其他常用技术
  • Minio 代理 Alibaba Cloud OSS

    Minio 代理 Alibaba Cloud OSS 在2017年12月份Minio引入Aliyun OSS 支持到master分支 xff0c 但是在2020年4月因为License问题导致阿里云OSS支持被移除 xff0c 后来2020
  • PicGo + 阿里云OSS 搭建图床工具(附Typora设置)

    PicGo 43 阿里云OSS 搭建图床工具 xff08 附Typora设置 xff09 一 xff1a 准备 点击下载PicGo 安装包 点击下载Typora安装包 开通阿里云OSS对象存储服务 这里我开通的是1年40GB xff0c 9
  • 阿里云 oss python3 例子

    阿里云的oss SDK又是不支持python3 xff0c 头疼头疼 本想改一改它的SDK xff0c 让它支持python2 43 python3 xff0c 无奈里面大量的代码使用不带括号的print xff0c 工作量恐怖 幸好oss
  • 阿里OSS上传文件的两种方式的详解

    阿里OSS上传文件 一 为什么要使用云存储 xff1f 1 存储费用低 xff0c 不占用服务器的磁盘空间 2 流量费用低 xff0c 上传或下载不占用服务器带宽 二 怎么使用云存储 xff1f 方法一 xff1a javascript客户
  • Ali OSS

    常用工具 对象存储 OSS 阿里云
  • 上传图片到阿里云OSS和获取上传图片的外网url的步骤

    啥都不说 直接上代码 1 html lt form action 61 34 bcis api headImgUpload json 34 method 61 34 post 34 enctype 61 34 multipart form
  • OSS上部署Html静态页面

    OSS收费简介及购买 1 只需9元 xff0c 就可以购买有40G的存储空间 2 内网读写不收费 xff0c 外网写不收费 xff0c 读收费 3 登录阿里云 xff0c 选择 产品 gt 对象存储OSS 滑动到页面底部 xff0c 购买试
  • res_company_white_url.py 详解

    res company white url py 主要作用是 在数据库中建立一个表 存放白名单的URL 当我们读取文件时 先判断Referer是否在白名单中 如果不在则自动转到一个图片文件 防止盗链 接下来我们看一下主要代码 class C
  • 阿里云OSS 上传文件

    阿里云后台管理 API 集成教程 Key 域名的查询 1 查看上传的文件在哪 a 百度阿里云 进入官网 然后进入管理控制台 b 左侧菜单栏 进入对象存储 OSS c 进入 Bucket 管理页面 点击创建的bucket 名称 d 进入buc
  • 阿里云OSS进行文件下载时,报NOSuchKeys: com.aliyun.oss.OSSException: The specified key does not exist.

    OSS文件下载 bucketName bucket的名称 objectName 保存文件时 OSS服务器返回给我们的url path 下载到本地的路径 OSSClient client new OSSClient endpoint acce
  • 没有服务器,unity 上传图片到oss服务器生成二维码

    一 前言 最近接了个外包 kinect换装 敬礼上传图片到服务器 返回链接二维码分享 自己没有服务器 问朋友朋友说可以用阿里的oss 直接上传展示 于是研究了下 然后分享下遇到的坑和制作过程 二 重点 这个里面我觉得有两点比较坑 源码中都已
  • OSS操作示例

    一 OSS API文档 https www alibabacloud com help zh doc detail 103185 htm spm a2c63 l28256 b99 879 7d315cc5HEvVNn 二 demo ifnd
  • 阿里云OSS使用Java上传文件

    一 准备工作 1 1登录阿里云点击对象存储OSS 1 2 先点击Bucket 列表 在点击创建Bucket 1 3 根据自己需求勾选 然后点击确定 1 4 新建好之后 点击bucket名称 1 5 点击文件管理 1 6 在这个页面就可以实现
  • 使用AFNetworking(一)

    AF是iOS中一个非常优秀的网络请求框架 下面从我个人的角度来对AF的使用做一个规范 文章目录 背景 结构图 核心的类 1 与AF框架对接的类 1 1 管理httpSessionManager 1 2 提供AP对外的API 2 发起类 2
  • The specified key does not exist.

    问题截图如下 解决办法 我这边的问题就是 拼接的地址跟实际上访问的地址不一样 首先就是建议你先去在oss对象储存那边查看一个文件的访问地址 对比你拼接的不同之处 这里可能有人会出现自己拼接的地址 在程序中写下载刚才上传的文件能够拿到 这是因
  • OSS服务端签名后直传

    OSS服务端签名后直传 1 阿里云OSS启动器快速上手 1 引入oss starter 1 引入oss starter
  • SpringBoot整合——阿里云对象存储(OSS)

    SpringBoot整合 阿里云对象存储 1 OSS介绍 在开发应用的过程中 我们经常会有用户需要实名认证之后才能访问的需求 用户认证需要上传证件图片 首页轮播也需要上传图片 因此我们要做文件服务 阿里云oss是一个很好的分布式文件服务系统
  • Springboot2整合阿里云OSS实现文件上传、下载、删除、查看

    1 阿里云配置 https jingyan baidu com article ea24bc3973db059a63b3316d html 2 pom文件
  • 【OSS】【Py】OSS出现The specified key does not exist问题

    今天接口的OSS模块出现异常 Exception status 404 x oss request id 5C50209BAE509FEEA16D753E details Code NoSuchKey Message The specifi

随机推荐

  • 【开源介绍】命令行的艺术( the-art-of-command-line )

    1 概述 转载 命令行的艺术 the art of command line
  • Blob数据类型、数据库事务

    1 Bolb是二进制长对象的意思 通常用于存储大文件 通过二进制数据保存到数据库里 并可以从数据库里恢复指定文件 2 如果需要将图片插入数据库 不能通过普通的SQL语句完成 Bolb常量无法表示 所以将Bolb数据插入数据库需要使用Prep
  • 合成孔径SAR卫星影像专业术语

    转载自 http www kosmos image com index php m content c index a show catid 73 id 4132 目录 Across track Active Remote Sensing
  • 初学机器学习:直观解读KL散度的数学概念

    选自thushv com 作者 Thushan Ganegedara 机器之心编译 机器学习是当前最重要的技术发展方向之一 近日 悉尼大学博士生 Thushan Ganegedara 开始撰写一个系列博客文章 旨在为机器学习初学者介绍一些基
  • 深度学习(Deep Learning)读书思考六:循环神经网络一(RNN)

    概述 循环神经网络 RNN Recurrent Neural Network 是神经网络家族中的一员 擅长于解决序列化相关问题 包括不限于序列化标注问题 NER POS 语音识别等 RNN内容比较多 分成三个小节进行介绍 内容包括RNN基础
  • QT窗体间传值总结之Signal&Slot

    在写程序时 难免会碰到多窗体之间进行传值的问题 依照自己的理解 我把多窗体传值的可以使用的方法归纳如下 1 使用QT中的Signal Slot机制进行传值 2 使用全局变量 3 使用public形式的函数接口 4 使用QT中的Event机制
  • 独立进程使用django模型(django.setup()使用)

    文章目录 独立进程使用django模型 独立进程使用django模型 步骤 django setup RuntimeError populate isn t reentrant 独立进程使用django模型报错 Apps aren t lo
  • 提升Postern代理性能的五个小技巧

    在使用Postern代理时 如何提高其性能是许多用户关注的问题 本文将分享一些针对Postern代理进行优化的技巧和建议 帮助更好地利用该工具并获得更出色的网络体验 Postern是一个功能强大且灵活易用的Android应用程序 可实现全局
  • 智能指针auto_prt的使用(c++学习笔记)

    c 中如果要申请资源一般用到new 最后释放资源delete 如果我们在delete之前就退出了函数呢 看下面的代码 cpp view plain copy include
  • 2 指定目录编译

    1 目录结构 指定目录编译 go build o bin calc1 exe day01 package example main 转载于 https www cnblogs com jec1999 p 9822834 html
  • TCP数据的传输过程

    TCP数据的传输过程 TCP Transmission Control Protocol 传输控制协议 是一种面向连接的 可靠的 基于字节流的通信协议 数据在传输前要建立连接 传输完毕后还要断开连接 客户端在收发数据前要使用 connect
  • Spark集群运行问题

    spark输出太多warning messages WARN Executor 2 block locks were not released by TID Lock release errors occur frequently in e
  • 阿里云对象存储oss费用明细

    https www aliyun com price product spm a311a 7996332 0 0 137630803P2qTh oss detail 最终决定 阿里云割韭菜 弃用选择业界其他便宜的 第二年阿里云只给你个续费
  • java操作svn--部分方法

    package com svnutil import java io File import java text DateFormat import java util ArrayList import java util Collecti
  • Fedora12 编译s3c2416 U-Boot1.3.4的Makefile和头文件

    复制Makefile到 和smdk2416 h到include configs 执行 make distclean make smdk2416 config make C Copyright 2007 2008 Jong pill Lee
  • matlab练习程序(Canny边缘检测)

    我可没直接调用系统函数 要是那样就太水了 其实我的matlab代码很容易就能翻译成c c 的 canny边缘检测一共四个部分 1 对原图像高斯平滑 2 对高斯平滑后的图像进行sobel边缘检测 这里需要求横的和竖的还有联合的 所以一共三个需
  • C语言链表——增删改查

    目录 一 链表的概念 1 1 什么是链表 二 链表和数组的区别 2 1 链表和数组的优缺点 2 1 1 数组的优缺点 2 1 2 链表的优缺点 三 链表的静态添加和动态遍历 四 统计链表节点个数及链表查找 五 链表插入 5 1 链表从指定节
  • 【程序设计训练】2-12 绩点计算

    问题描述 学校对本科生的成绩施行绩点制 GPA 将学生的实际考分根据不同学科的不同学分按一定的公式进行计算 规定如下 实际成绩 绩点 90 100 4 0 85 89 3 7 82 84 3 3 78 81 3 0 75 77 2 7 72
  • MIT教授Tegmark:GPT-4敲响警钟,百年后人类何去何从丨智源大会嘉宾风采

    导读 一封呼吁暂停大模型研究6个月的公开信让一家名为未来生命研究所 Future of Life Institute 简称 FLI 站上了风口浪尖 这家研究所的联合创始人Max Tegmark是来自麻省理工学院的物理学家和人工智能研究员 生
  • 对象存储OSS-iOS

    文章目录 对象存储OSS iOS 一 基础解读 1 相关名词 2 OSS的上传和下载 3 基于SDK快速开始 4 基于OSS的移动开发 4 1 整体流程 4 1 1 客户端申请STS凭证 4 1 2 AppServer请求AssumeRol