gpt4 book ai didi

upload - iOS 使用 NSURLSessionUploadTask 上传文件但没有发送 httpbody

转载 作者:行者123 更新时间:2023-12-01 11:10:28 31 4
gpt4 key购买 nike

我想使用 NSURLSessionUploadTaskfileUrl API 上传一个大文件。下面的代码是我写的上传一个大文件。我发现了这些问题:

  1. -URLSession:task:didCompleteWithError: 中出现“超时”错误。

  2. 在发送的包中未找到http body(使用wireshark)。这是我的代码:

    NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];   
    NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];

    NSURL *url = [My URL];
    fileName = [[DBList objectAtIndex:fileIndex] objectForKey:@"title"];
    NSString *boundary = [self getBoundaryStr];

    NSMutableData *dataSend = [[NSMutableData alloc] init];
    [dataSend appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", @"target_path"] dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[[NSString stringWithFormat:@"/%@",[NSString stringWithFormat:@"%@/%@/%@",UploaderController.getDestination,APP_UPLOADER,[Functions getDateString]]] dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"file_path\"; filename=\"%@\"\r\n", fileName] dataUsingEncoding:NSUTF8StringEncoding]];
    [dataSend appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"POST"];
    [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
    [request setValue:[@"authtok=" stringByAppendingString:[broker getNasAuthtok]] forHTTPHeaderField:@"Cookie"];
    [request setHTTPBody:dataSend];

    NSString *tempFile = [NSTemporaryDirectory() stringByAppendingPathComponent:@"uploadFile"];
    NSURL *uploadfileURL = [[NSURL alloc] initFileURLWithPath:tempFile];
    NSURLSessionUploadTask *sessionUploadTask = [session uploadTaskWithRequest:request fromFile:uploadfileURL];
    [sessionUploadTask resume];

    [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

有谁知道我错过了什么吗?非常感谢!!

我想知道 fileURL 是指包含一些发布数据和上传文件的文件,对吗?

或者只是上传视频之类的文件?

最佳答案

NSURLSessionUploadTask 将忽略 http 正文。

您可以将要上传的文件连同您已有的参数添加到 dataSend 对象。然后将dataSend写入本地文件。最后使用该本地文件的 url 创建一个 uploadTask。

棘手的部分是准备 dataSend 对象。您可以先尝试使用 NSURLConnection 发送 post 请求。然后使用上传任务将您的代码从 NSURLConnection 迁移到 NSURLSession。

关于upload - iOS 使用 NSURLSessionUploadTask 上传文件但没有发送 httpbody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19924189/

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