作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在服务器上上传图片。如何将同步请求更改为异步请求。因为我想在上传图片时使用进度条..
我的代码是。
+(NSDictionary *)UploadPhoto :(UIImage *)image{
NSString *DeviceId;
NSString *TokenValue=tokenTemp;
DeviceId = DevID;
NSString *Nonce=[self generateRandomString];
NSString *currentTimeStamp = [self GetTimeStamp];
NSString *Cipher=[NSString stringWithFormat:@"%@%@%@%@%@",mySecret,DeviceId,Nonce,currentTimeStamp,TokenValue];
Cipher=[Cipher URLDecodedString];
Cipher=[self GetCipher:Cipher];
UIImage *TempPicture=image;//[UIImage imageNamed:imageName];
NSData *PictureData=UIImageJPEGRepresentation(TempPicture, 1.0);
NSURL *url=[NSURL URLWithString:[NSString stringWithFormat:@"%@Messages.php",WebServiceUrl]];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setTimeoutInterval:20.0f];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"multipart/form-data; boundary=*****" forHTTPHeaderField:@"Content-Type"];
NSMutableData *postBody = [NSMutableData data];
NSString *stringBoundary = [NSString stringWithString:@"*****"];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"method\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"%@",@"Upload"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"Type\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"%@",@"0"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"Name\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"%@",@"XYZ ****************"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"MessageImage\"; filename=\"c.png\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[NSData dataWithData:PictureData]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[request setHTTPBody: postBody];
[request setValue:Cipher forHTTPHeaderField:@"Cipher"];
[request setValue:DeviceId forHTTPHeaderField:@"Deviceid"];
[request setValue:Nonce forHTTPHeaderField:@"Nonce"];
[request setValue:currentTimeStamp forHTTPHeaderField:@"Timestamp"];
[request setValue:TokenValue forHTTPHeaderField:@"Token"];
[request setHTTPBody:postBody];
NSError *error;
NSHTTPURLResponse *response;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSString *data=[[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
if (!data) {
NSLog(@"nil");
}
NSDictionary *temp= [response allHeaderFields];
NSString *temp2= [temp objectForKey:@"Responsecode"];
if(temp2!=nil && [temp2 length]>0)
{
}
else
{
}
return temp;
}
谢谢..请帮助..
如何调用- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite
在此代码中..
最佳答案
如果你想跟踪上传进度,你必须使用
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self]
并实现所有的 NSURLConnectionDelegate
方法。这是描述in this Apple documentation .
特别是 connection:didSendBodyData:totalBytesWritten:totalBytesExpectedToWrite:
委托(delegate)方法会通知您上传进度。
此方法的另一个优点是您可以取消一个请求,这是sendSynchronousRequest
或sendASynchronousRequest
做不到的。
关于iphone - 如何在 ios 中将 sendSynchronousRequest 更改为 sendASynchronousRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11912860/
我是一名优秀的程序员,十分优秀!