从来自NSUrlRequest的httpcontext获取变量
对于Iphone和asp.net服务器之间的http连接“POST”,这个问题将是一个很好的教程:)我想要做的是将图像从iphone发送到Asp.net服务器; 这是我在objective-c中的uploadImagefunction:
- (IBAction)uploadImage { /* turning the image into a NSData object getting the image back out of the UIImageView setting the quality to 90 */ NSData *imageData = UIImageJPEGRepresentation(image.image, 33); // setting up the URL to post to NSString *urlString = @"MyWebServiceUrl"; // setting up the request object now NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; /* add some header info now we always need a boundary when we post a file also we need to set the content type You might want to generate a random boundary.. this is just the same as my output from wireshark on a valid html post */ NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; /* now lets create the body of the post */ NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; filepath="ProfilePic"; filename="ipodfile"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // setting the body of the post to the reqeust [request setHTTPBody:body]; // now lets make the connection to the web NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"%@", returnString);
}
这是我的webService Fonctions,它解析发送的数据并保存文件:
public class SaveData : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; bool hasErrors = false; HttpFileCollection filesPosted = context.Request.Files; String filePath = context.Request.QueryString["filepath"]; String fileName = context.Request.QueryString["filename"]; try { if (String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(filePath) || filesPosted.Count <= 0) hasErrors = true; if (!hasErrors) { HttpContext.Current.Response.Write(WriteFile(filesPosted[0], filePath, fileName)); } else { context.Response.Write("Failed: parsing error"); } } catch (Exception ex) { context.Response.Write("Failed: exception error:::" + ex.Message); } } private string WriteFile(HttpPostedFile file, String filePath, String fileName) { System.IO.Directory.CreateDirectory(filePath); int counter = 0; string path = String.Format("{0}\{1}.jpg", filePath, fileName); while (System.IO.File.Exists(path)) { counter++; path = String.Format("{0}\{1}-{2}.jpg", filePath, fileName, counter); } file.SaveAs(path); return path; } public bool IsReusable { get { return false; } } }
我的问题来自这两行
String filePath = context.Request.QueryString["filepath"]; String fileName = context.Request.QueryString["filename"];
context.Request.QueryString返回null,因此我的hasErrors为false; 任何想法如何解决,将非常感谢,感谢所有人。
查询字符串将从Url参数填充(https://someserver.com/foobar?field1=value1&field2=value2)
要访问POST正文中发送的表单数据,请使用Request.Form["filepath"]
或简写Request["filepath"]
,它在Form,QueryString,Cookies和ServerVariables集合中查找项目。
已发布文件的数据可在Request.Files
找到
经过一天的尝试,这里的解决方案:
客户代码:
// post body NSMutableData *body = [NSMutableData data]; // add params (all params are strings) [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"rnrn", @"filename"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"%@rn", imageName] dataUsingEncoding:NSUTF8StringEncoding]]; // add image data if (imageData) { [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="myImage"; filename="image.jpg"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: image/jpegrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:imageData]; [body appendData:[[NSString stringWithFormat:@"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; }
Asp.net服务器代码:
String filePath = context.Request.Form["filename"];
希望你喜欢这个问题(教程);)
上述就是C#学习教程:从来自NSUrlRequest的httpcontext获取变量分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026794.html