如果可能的话,我真正想要的是这个用例:
>客户端应用已准备好上传视频.
>将视频文件上传到some-cloud-service.com/myCompany/videoNameID.mp4
>将此URL存储在数据库中“视频对象”的URL字段中.
>当其他用户提取视频列表时,他们会获得一组名称和URL
>当用户想要播放某个视频时,请从表格中的URL中获取该视频.
我一直在想我可以使用云存储作为上传和访问我的应用程序文件的地方.我一直在浏览Google云端存储的API和文档,但是那里有很多我没用的东西,而且我对它的大部分都不了解.我开始认为“云存储”并不是我认为的那样.我只是需要一个地方来直接从iOS应用程序(以及稍后的网站)上传潜在的大量大文件. Parse提供的数据存储服务非常完美,但尺寸非常有限.我知道它有可能变得昂贵.从阅读this谷歌服务的价格,它看起来既便宜又正是我需要的,但我无法理解,如果可能的话,我应该如何使用它直接上传文件,使用我的“凭据”,并接收URL返回文件结束的位置.
我可以使用谷歌的云存储吗?或者是其他东西?或者我完全误解了如何使用云存储?
解决方法
https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Preparing_to_Use_the_Library
它告诉您这个包装器库是基于底层JSON API自动生成的.因此,所有GTLStorage …类都将模仿Google Storage的JSON API.执行实际API调用的类是GTLQueryStorage.
如果查看该JSON文档,您会发现有一个用于将数据存储到存储桶中的对象:https://developers.google.com/storage/docs/json_api/v1/#Objects
上传新对象的方法是“插入”
回到GTLQueryStorage.h文件,您将找到相应的Objective-C方法将新对象插入到存储桶中:
// Method: storage.objects.insert // Stores new data blobs and associated @R_404_338@data. // required: // bucket: Name of the bucket in which to store the new object. Overrides the // provided object @R_404_338@data's bucket value,if any. // Optional: // ifGenerationMatch: Makes the operation conditional on whether the object's // current generation matches the given value. // ifGenerationNotMatch: Makes the operation conditional on whether the // object's current generation does not match the given value. // if@R_404_338@generationMatch: Makes the operation conditional on whether the // object's current @R_404_338@generation matches the given value. // if@R_404_338@generationNotMatch: Makes the operation conditional on whether the // object's current @R_404_338@generation does not match the given value. // name: Name of the object. required when the object @R_404_338@data is not // otherwise provided. Overrides the object @R_404_338@data's name value,if any. // projection: Set of properties to return. Defaults to noAcl,unless the // object resource specifies the acl property,when it defaults to full. // kGTLStorageProjectionFull: Include all properties. // kGTLStorageProjectionNoAcl: Omit the acl property. // Upload Parameters: // Accepted MIME type(s): */* // Authorization scope(s): // kGTLAuthScopeStorageDevstorageFullControl // kGTLAuthScopeStorageDevstorageReadWrite // Fetches a GTLStorageObject. + (id)queryForObjectsInsertWithObject:(GTLStorageObject *)object bucket:(NSString *)bucket uploadParameters:(GTLUploadParameters *)uploadParametersOrNil;
所以你应该:
>分配GTLServiceStorage的实例>将API密钥设置为该对象>使用上面的类方法为要使用正确存储桶保存的对象实例化GTLQueryStorage对象>创建一个服务票据,它执行查询并获得一个完成处理程序来处理完成(成功,错误情况).