gpt4 book ai didi

iOS8扩展后台NSURLSession沙盒报错

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:38:33 25 4
gpt4 key购买 nike

我正在尝试使用后台 NSURLSession 从照片应用中的共享扩展上传文件。因为后台 NSURLSession 仅支持使用 uploadTaskWithRequest:WithFile: API 的上传任务,所以我首先获取从扩展中检索到的图像 URL 的 URL,将图像内容写入共享容器,然后上传新文件。 NSURLSession 似乎有权限问题,我收到此错误:

“无法为文件 file:///private/var/mobile/Containers/Shared/AppGroup/... 发布沙箱扩展”

我知道有一些类似的帖子,但没有一个是从扩展程序加载 url,也没有显示将临时文件写入何处。

代码如下:

- (void)fetchImageURLInExtensionContext:(NSExtensionContext*) context onComplete:(void (^)()) completion
{
NSExtensionItem *item = self.extensionContext.inputItems[0];
NSItemProvider *provider = item.attachments[0];
if ([provider hasItemConformingToTypeIdentifier:@"public.jpeg"]) {
[provider loadItemForTypeIdentifier:@"public.jpeg" options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) {
NSObject *obj = item;
if ([obj isKindOfClass:[NSURL class]]) {
self.imageURL = obj;
completion();
}
}];
}
}

- (void)postImage
{
// copy file to shared container
NSURL *containerURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.com.mytestgroup"];
NSString *writeToPath = [[containerURL path] stringByAppendingPathComponent:@"temp.jpg"];
BOOL success = [[NSData dataWithContentsOfURL:self.imageURL] writeToFile:writeToPath atomically:YES];

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"https://api.imgur.com/3/image"]];
NSString *boundary = @"multipartboundary";
[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
request.HTTPMethod = @"POST";
[request setValue:@"Client-ID my_imgur_client_id" forHTTPHeaderField:@"Authorization"];

NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"blah"];
config.sharedContainerIdentifier = @"group.com.mytestgroup";

NSURLSession *session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
NSURLSessionTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:writeToPath]];
[uploadTask resume];
}

最佳答案

解决方案:将文件从收件箱移动到临时目录并从那里上传。

关于iOS8扩展后台NSURLSession沙盒报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com