Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何通过HTTP post将数据字节发送到.NET服务器_Iphone_.net_Ios - Fatal编程技术网

Iphone 如何通过HTTP post将数据字节发送到.NET服务器

Iphone 如何通过HTTP post将数据字节发送到.NET服务器,iphone,.net,ios,Iphone,.net,Ios,将表单的enctype设置为“multipart/formdata”会导致Web服务引发异常 System.InvalidOperationException:请求格式无效:多部分/表单数据;边界=-- 我需要将HTML表单直接发布到Web服务,但它不能由.NET服务器托管 任何想法 提前感谢。请参阅以了解多部分协议的含义。 您需要手工制作多部分“装饰”,此代码可能有助于: -(NSData *)makeMultipartDataWithBoundary:(NSString *) boundar

将表单的enctype设置为“multipart/formdata”会导致Web服务引发异常

System.InvalidOperationException:请求格式无效:多部分/表单数据;边界=--

我需要将HTML表单直接发布到Web服务,但它不能由.NET服务器托管

任何想法

提前感谢。

请参阅以了解多部分协议的含义。 您需要手工制作多部分“装饰”,此代码可能有助于:

-(NSData *)makeMultipartDataWithBoundary:(NSString *) boundary 
                              parameters:(NSDictionary *)parameters
                                formName:(NSString *)formName 
                                fileName:(NSString *)fileName 
                                fileType:(NSString *)fileType
                                fileData:(NSData*)fileData
{    
    NSMutableString * res = [NSMutableString stringWithFormat:@"--%@\r\n", boundary];

    for(NSString * key in [parameters allKeys]){

        NSString * value = [parameters objectForKey:key];

        if(![value isMemberOfClass:[NSString class]]) continue;

        [res appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];
        [res appendFormat:@"\r\n%@\r\n", value];
        [res appendFormat:@"--%@\r\n", boundary];
    }
    [res appendFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", formName, fileName];
    [res appendFormat:@"Content-Type: %@\r\n\r\n", fileType];

    NSMutableData * data= [NSMutableData data];

    NSLog(@"%@", res);

    [data appendData:[res dataUsingEncoding:NSUTF8StringEncoding]];
    [data appendData:fileData];
    [data appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


    return data;
}
其中:

boundary是一个NSString(字节序列),它不会出现在fileData部分中。e、 g.“D33pN16h7abcd”

parameters是一个字典,包含要传递给多部分协议的所有头参数

formName是一个标识符

fileType是mime文件类型,例如“image/png”

最后,fileData是文件内容的字节

下面几行显示了调用此方法的示例:

- (void) sendAllData {
    NSData *data;

    data = [self makeMultipartDataWithBoundary:kBoundary 
                                    parameters:nil 
                                      formName:@"imageField"                              fileName:@"imageExample.png" 
                                      fileType:@"image/png" 
                                      fileData:self.imageData];
    // Make a post NSURLConnection request with the data  

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://www.example.org/file.php"] 
                                                           cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
                                                       timeoutInterval:60.0]; 
    [request setHTTPMethod:@"POST"]; 
    [request setHTTPBody:data]; 
    [request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", kBoundary] forHTTPHeaderField:@"Content-Type"]

    NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
    if (connection) { 
        receivedData = [[NSMutableData data] retain]; 
    } 
}

希望这有帮助!:)

通过使用SOAP服务解决。最终工作代码如下:

NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init]

NSData *imageDataToSend =  [[NSData alloc] initWithData:UIImageJPEGRepresentation(previewImageView_.image, 90)];

NSString *imgegeDataStr = [imageDataToSend base64EncodedString];

NSString *soapMsg = [[NSString alloc] initWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><SaveCampaignImage xmlns=\"http://tempuri.org/\"><CampaignImage>%@</CampaignImage><ImageName>image1</ImageName><CampaignID>4</CampaignID></SaveCampaignImage></soap:Body></soap:Envelope>",imgegeDataStr];
NSLog(@"soapMsg");
NSURL *url = [NSURL URLWithString:@"http://10.4.3.224/VerizonDealsWebService/Service1.asmx"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMsg length]];

[req addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[req addValue:@"http://tempuri.org/SaveCampaignImage" forHTTPHeaderField:@"SOAPAction"];
[req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[req setHTTPMethod:@"POST"];
[req setHTTPBody: [soapMsg dataUsingEncoding:NSUTF8StringEncoding]];

NSURLConnection *connection_ = [[NSURLConnection alloc] initWithRequest:req delegate:self];
[connection_ start];
[connection_ release];
[pool release];
NSData*imageDataToSend=[[NSData alloc]initWithData:uiimagejpegresentation(previewImageView\uuu.image,90)];
NSString*imgegeDataStr=[imageDataToSend base64EncodedString];
NSString*soapMsg=[[NSString alloc]initWithFormat:@“%@image14”,imgegeDataStr];
NSLog(“soapMsg”);
NSURL*url=[NSURL URLWithString:@”http://10.4.3.224/VerizonDealsWebService/Service1.asmx"];
NSMutableURLRequest*req=[NSMutableUrlRequestWithURL:url];
NSString*msgLength=[NSString stringWithFormat:@“%d”,[soapMsg长度]];
[req addValue:@“text/xml;charset=utf-8”用于httpheaderfield:@“Content Type”];
[请求添加值:@”http://tempuri.org/SaveCampaignImageforHTTPHeaderField:@“SOAPAction”];
[req addValue:msgLength for HttpHeaderField:@“内容长度”];
[req setHTTPMethod:@“POST”];
[req setHTTPBody:[soapMsg dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection*连接\=[[NSURLConnection alloc]initWithRequest:req委托:self];
[连接启动];
[连接释放];
[池释放];

谢谢您的回答。对于php服务器,您的答案是正确的,但是对于.net服务器,我仍然面临同样的问题。因此,我也使用了SOAP服务。