gpt4 book ai didi

ios - 服务器没有收到来自 NSURLSessionUploadTask 的数据

转载 作者:行者123 更新时间:2023-11-29 02:51:29 25 4
gpt4 key购买 nike

我正在尝试通过 AFNetworking 使用 NSURLSessionUploadTask 通过多部分请求上传文件。请求执行并收到来自服务器的响应,但服务器未收到表单中的数据。

iOS 代码

NSString *urlString = [[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString];
NSError *error = nil;

NSMutableURLRequest *request = [self.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
//
[formData appendPartWithFileData:[NSData dataWithContentsOfURL:[NSURL fileURLWithPath:path]]
name:@"video"
fileName:[path lastPathComponent]
mimeType:@"video/mp4"];
} error:&error];

if ([account isAuthenticated]) {;
NSString *authHeader = [NSString stringWithFormat:@"Bearer %@", account.accessToken];
[request setAllHTTPHeaderFields:@{@"Authorization": authHeader}];
}

NSURLSessionUploadTask *task = [self uploadTaskWithStreamedRequest:request progress:progress completionHandler:^(NSURLResponse * __unused response, id responseObject, NSError *error) {
if (error) {

} else {

}
}];
[task resume];

这是来自 AFNetworkingActivityLogger 的请求的 header 信息:

POST 'http://127.0.0.1:8000/upload/': {
"Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
Authorization = "Bearer 270f985de7ebf0aa49b7ff1cad8377e007141f94";
"Content-Length" = 225974;
"Content-Type" = "multipart/form-data; boundary=Boundary+4597B504492E1006";
"User-Agent" = "Test/1.0 (iPad Simulator; iOS 7.1; Scale/1.00)";
} (null)

我在服务器端使用 Django。这是测试 View :

class UploadView(View):

def post(self, request, *args, **kwargs):
logger.debug("FILES: {0} | DATA: {1}".format(request.FILES, request.POST))
return HttpResponse(content=json.dumps({"test": "2"}), content_type='application/json')

但是 FILES 和 POST 对象都是空的:

FILES: <MultiValueDict: {}> | DATA: <QueryDict: {}>

这在没有多部分请求的情况下工作 - 只需发送一个 POST 请求而不上传文件 QueryDict 被填充。我不确定的一件事是,根据 AFNetworkingActivityLogger 输出,请求的主体是“(null)”。

感谢任何帮助!我很难过。

最佳答案

来自 -[NSURLSession uploadTaskWithStreamedRequest:] 的文档(看起来这就是您正在使用的内容):

... The body stream and body data in this request object are ignored, and NSURLSession calls its delegate’s URLSession:task:needNewBodyStream: method to provide the body data.

你实现了那个委托(delegate)方法了吗?

https://developer.apple.com/library/ios/documentation/Foundation/Reference/NSURLSession_class/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013435-CH1-SW28

关于ios - 服务器没有收到来自 NSURLSessionUploadTask 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456197/

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