Загрузить фото с iphone на restful wcf - PullRequest
1 голос
/ 29 февраля 2012

Я пытаюсь загрузить фотографию с iphone на спокойный wcf. Я пытался много раз, но не получилось. Вот мой код

Код от клиента

-(IBAction)uploadClick:(id)sender{
NSString *surl = @"http://192.168.5.226:8068/FileService.svc/UploadFile" ;
NSURL *url = [NSURL URLWithString:surl];

ASIFormDataRequest *r = [ASIFormDataRequest requestWithURL:url];
[r setValidatesSecureCertificate:NO];
[r setTimeOutSeconds:30];
[r setRequestMethod:@"POST"]; //default is POST (insert), 
[r setDelegate:self];
[r setDidFailSelector:@selector(requestDidFail:)];
//[r addRequestHeader:@"Content-Type" value:@"application/json"]   this will cause the call to fail.  No content-type header for this call.

NSMutableData *imageData = [NSMutableData dataWithData:UIImageJPEGRepresentation([UIImage imageWithData:self.pickedFileContent], .35)];
[r setPostBody:imageData];
[r setDidFinishSelector:@selector(imageSaveDidFinish:)];
[r startAsynchronous];}

Код от restful wcf:

 public interface IFileService
{
    [OperationContract, WebInvoke(UriTemplate = "UploadFile", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]
    void UploadFile( Stream fileContent);
}
public class FileService : IFileService
{
    public void UploadFile(Stream fileContent)
    {
          convert the stream to a file and save it.
    }
}

когда я запускаю событие uploadClick с iphone, данные изображения преобразуются в NSMutableData, но после [r startAsynchronous] ничего не происходило, это restful wcf. Я думаю, что, возможно, запрос не достиг wcf или wcf не смог его распознать. Я хочу знать, что с ним не так или дать мне другое решение. Любые комментарии приветствуются.

1 Ответ

1 голос
/ 29 февраля 2012

Здесь вы пытаетесь отправить данные изображения в веб-сервис. Я не уверен, что это решение, которое вы ищете.

Так я размещаю данные изображения в сервисе RESTful.

Вам нужно будет обернуть данные изображения в граничный параметр в запросе. Ниже код объясняет, как это сделать.

NSURL *url = [NSURL urlWithString:@"http://www.sample.com/websevice.php"];
NSMutableRequest *uRequest = [[NSMutableRequest alloc]initWithUrl:url];
//STEP1 Creating NSData from UIImage
NSData *postImageData = UIImageJPEGRepresentation(image, .7);
NSMutableData *body = [NSMutableData data];

//STEP2 Creating Boundary
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];

//Setting POST Header
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[uRequest addValue:contentType forHTTPHeaderField: @"Content-Type"];

//STEP3 Begin boundary
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

//STEP4 Adding additional parameters 
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n",fileName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];

//STEP5 Appending Image Data
[body appendData:[NSData dataWithData:postImageData]];


//STEP6 Closing boundary
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

// setting the body of the post to the reqeust
[uRequest setHTTPBody:body];
// IMPLEMENT NSURLConnectionDelegate Protocol
NSURLConnection *connection = [[NSURLConnection alloc]initWithRequest:uRequest delegate:self];
...