我正在使用ASIHTTPFormDataRequest上传视频文件。我知道我的代码有效,因为当我在iPhone上上传1.5 MB以下(低质量,1分40秒)的视频时,它成功发布了。我确信这是一个服务器问题,所以我们做了所有的测试,但没有成功。直到前几天我才能在iPhone模拟器中成功上传大文件。该文件超过5 MB,质量很高。所以我不得不相信它与iPhone设备本身有关。我已经搜索了一场暴风雨并带着同样愚蠢的回应回来:这是一个服务器问题。那不是......
这是我的代码:
-(void) post:(NSData *) pVideoData progressBarView:(UIProgressView *) pProgressBarView{
pVideoData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_pPhotoURL];
NSString *urlAddress = [NSString stringWithString:@"https://api.sitename.com/action/upload"];
NSURL *url = [NSURL URLWithString:urlAddress];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:API_KEY forKey:@"api_key"];
[request setPostValue: m_pAppDelegate.m_pAppData.m_sTokenKey forKey:@"user_token"];
[request setPostValue: @"somename" forKey:@"tag"];
[request setPostValue: [AppData getIPAddress] forKey:@"ip"];
[request setData:pVideoData forKey:@"file"];
request.numberOfTimesToRetryOnTimeout = 3;
[request setDelegate:self];
[request showAccurateProgress];
[request setShouldStreamPostDataFromDisk:YES];
[request setDidFinishSelector:@selector(postRequestSuccess:)];
[request setDidFailSelector:@selector(postRequestFailed:)];
[request startAsynchronous];
[request setUploadProgressDelegate: pProgressBarView];}
一切正常。请注意,我已经尝试过以下操作:同步下载,& setfile。但我并不相信问题出在我的代码或服务器上。
以下是我上传时获得的数据:请注意两者之间的差异。
成功上传视频:
2012-03-13 14:31:06.413 MYAPP[7805:707] [STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb9bc00>
2012-03-13 14:31:06.543 MYAPP[7805:8c07]
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-26765320-0965465416-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="api_key"
*SECRET --0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="user_token"
Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="tag"
NPSH Live
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="ip"
61.197.151.129
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="longitude"
-122.357832
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="latitude"
47.781178
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream
[920870 bytes of data]
--0xKhTmLbOuNdArY-26765320-0916-4395-BA24-AA5CF2B58A66--
==== End of multipart/form-data body ====
2012-03-13 14:31:06.550 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb9bc00> will not use a persistent connection
2012-03-13 14:31:06.819 MYAPP[7805:8c07] [THROTTLING] ===Used: 238 bytes of bandwidth in last measurement period===
wait_fences: failed to receive reply: 10004003
2012-03-13 14:31:07.992 MYAPP[7805:8c07] [THROTTLING] ===Used: 327680 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.053 MYAPP[7805:8c07] [THROTTLING] ===Used: 655360 bytes of bandwidth in last measurement period===
2012-03-13 14:31:09.820 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished uploading data
2012-03-13 14:31:10.070 MYAPP[7805:8c07] [THROTTLING] ===Used: 860720 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.320 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:31:11.835 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> received response headers
2012-03-13 14:31:11.843 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb9bc00> finished downloading data (105 bytes)
2012-03-13 14:31:11.854 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb9bc00>
FAILED UPLOAD:
[STATUS] Starting asynchronous request <ASIFormDataRequest: 0xb8e200>
wait_fences: failed to receive reply: 10004003
2012-03-13 14:21:03.093 MYAPP[7805:8c07]
==== Building a multipart/form-data body ====
--0xKhTmLbOuNdArY-E6B28382AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="api_key"
*secret
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="user_token"
Br300MCw4P-l06SFITFCHdiifBHdOCPczX0Y830Yfabox3wLMPs2s7MlWTAS7F2TlwuhL2kiZ7mEXeDWkmDi5g
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="tag"
test
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="ip"
81.197.151.699
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="longitude"
-122.357874
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="latitude"
47.781192
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E
Content-Disposition: form-data; name="file"; filename="file"
Content-Type: application/octet-stream
[3280300 bytes of data]
--0xKhTmLbOuNdArY-E6B2AE4C-F123-499E-8076-19CC8D41F46E --
==== End of multipart/form-data body ====
2012-03-13 14:21:03.099 MYAPP[7805:8c07] [CONNECTION] Request <ASIFormDataRequest: 0xb8e200> will not use a persistent connection
2012-03-13 14:21:03.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 2500 bytes of bandwidth in last measurement period===
2012-03-13 14:21:04.605 MYAPP[7805:8c07] [THROTTLING] ===Used: 0 bytes of bandwidth in last measurement period===
2012-03-13 14:21:05.698 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:06.744 MYAPP[7805:8c07] [THROTTLING] ===Used: 688128 bytes of bandwidth in last measurement period===
2012-03-13 14:21:07.755 MYAPP[7805:8c07] [THROTTLING] ===Used: 1114112 bytes of bandwidth in last measurement period===
2012-03-13 14:21:08.855 MYAPP[7805:8c07] [THROTTLING] ===Used: 950272 bytes of bandwidth in last measurement period===
2012-03-13 14:21:09.897 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:11.050 MYAPP[7805:8c07] [THROTTLING] ===Used: 393216 bytes of bandwidth in last measurement period===
2012-03-13 14:21:12.085 MYAPP[7805:8c07] [THROTTLING] ===Used: 917504 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.104 MYAPP[7805:8c07] [THROTTLING] ===Used: 458752 bytes of bandwidth in last measurement period===
2012-03-13 14:21:13.858 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished uploading data
2012-03-13 14:21:14.354 MYAPP[7805:8c07] [THROTTLING] ===Used: 1123122 bytes of bandwidth in last measurement period===
2012-03-13 14:21:15.014 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> received response headers
2012-03-13 14:21:15.017 MYAPP[7805:8c07] [STATUS] Request <ASIFormDataRequest: 0xb8e200> finished downloading data (76 bytes)
2012-03-13 14:21:15.034 MYAPP[7805:8c07] [STATUS] Request finished: <ASIFormDataRequest: 0xb8e200>
那么你们认为问题是什么呢?另一个注意事项:我已尝试使用其他wifi连接以及关闭wifi,使用3g并关闭3g并仅使用wifi。您认为用户可以在iPhone上上传的数量有限制吗?
最后一次注意:
上传显然是成功的,但我想我上传的文件一起变得无效。我的服务器响应成功,告诉我一切都已设置好,但视频文件本身。视频文件无效。然而它在模拟器中起作用......
EDIT !!
我刚刚完成了我上传的不同方法,并且在完全相同的情况下我得到了完全相同的错误所以我开始认为我的核心文件有用吗?可能有记忆吗?
NSURL *remoteUrl = [NSURL URLWithString:@"http://api.mysite.com/upload"];
NSURL *myfile = [NSURL URLWithString:m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];
NSData * photoImageData = [NSData dataWithContentsOfFile: m_pAppDelegate.m_pAppData.m_PendingInfo.m_pMovieURL];
NSError **error;
// [photoImageData writeToFile:filePath atomically:YES];
AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:remoteUrl];
NSMutableURLRequest *afRequest = [httpClient multipartFormRequestWithMethod:@"POST"
path:@""
parameters:nil
constructingBodyWithBlock:^(id <AFMultipartFormData>formData)
{
[formData appendPartWithFormData:[API_KEY dataUsingEncoding:NSUTF8StringEncoding]
name:@"api_key"];
[formData appendPartWithFormData:[m_pAppDelegate.m_pAppData.m_sTokenKey dataUsingEncoding:NSUTF8StringEncoding]
name:@"user_token"];
[formData appendPartWithFileData:photoImageData
name:@"file"
fileName:@"test.mov"
mimeType:@"video/quicktime"];
[formData appendPartWithFileURL:myfile name:@"file" error:error];
}
];
AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:afRequest];
[operation setUploadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) {
NSLog(@"Sent %d of %d bytes", totalBytesWritten, totalBytesExpectedToWrite);
}];
[operation setCompletionBlock:^{
NSLog(@"%@", operation.responseString); //Gives a very scary warning
}];
[operation start];
答案 0 :(得分:1)
您需要增加请求的timeOutSeconds
。请求的默认时间为60秒。您可能会增加到10分钟(600秒)。
[request setTimeOutSeconds:600];
您还需要检查php.Please中指定的最大上传文件大小,通过此链接,这可能会对您有所帮助。 http://drupal.org/node/97193
答案 1 :(得分:0)
原来我的.htpconfig文件中存在问题。我设置了硬限制。调整它就像一个魅力!