我一直在梳理很多关于在iOS上通过POST上传图片的帖子.尽管有关此主题的大量信息,但我无法正确上传从我的iPhone模拟器照片库中获取的JPEG数据.数据一旦在服务器上,就只是一串巨大的十六进制数据.NSData不应该只是一个字节流吗?我不知道所有的十六进制是什么,或者为什么这个代码似乎适用于其他所有人.
这是有问题的代码:
-(void)uploadWithUserLocationString:(NSString*)userLocation{
NSString *urlString = @"http://some.url.com/post";
// set up the form keys and values (revise using 1 NSDictionary at some point - neater than 2 arrays)
NSArray *keys = [[NSArray alloc] initWithObjects:@"auth",@"text",@"location",nil];
NSArray *vals = [[NSArray alloc] initWithObjects:self.authToken,self.textBox.text,userLocation,nil];
// set up the request object
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
//Add content-type to Header. Need to use a string boundary for data uploading.
NSString *boundary = [NSString stringWithString:@"0xKhTmLbOuNdArY"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; …Run Code Online (Sandbox Code Playgroud) 我已成功创建了两种不同的方法,每种方法都可以上传图像或文本.但我在写一个可以同时发布文本和图像的方法时遇到问题!
//这是我的新方法,巫婆比@sgosha更好地工作:
- (void) upload {
NSString *urlString = @"http://www.examplescript.com";
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSMutableData *body = [NSMutableData data];
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];
// file
NSData *imageData = UIImageJPEGRepresentation(imageView.image, 90);
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: attachment; name=\"userfile\"; filename=\".jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithString:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
// Text parameter1
NSString *param1 = @"parameter …Run Code Online (Sandbox Code Playgroud) 我发现,在编译iOS 8(并在iOS 8中运行)时,UIWebView如果在UIWebView模式中呈现的视图控制器中,则无法显示相机/图像选择器.它在视图控制器中直接从窗口"悬挂" rootViewController或从其推出的视图控制器中工作没有问题.
测试应用程序可以在https://dl.dropboxusercontent.com/u/6214425/TestModalWebCamera.zip找到,但我将在下面进行描述.
我的测试应用程序(使用故事板构建,但实际应用程序不使用它们)有两个视图控制器(非原始命名ViewController和ViewController2).ViewController包含在UINavigationController根视图控制器中.ViewController包含一个UIWebView(工作正常),一个"显示"("推")的按钮ViewController2,以及一个UIBarButtonItem模态呈现的按钮ViewController2.ViewController2有另一个UIWebView在"推"时工作但在"提出"时不工作.
双方ViewController并ViewController2装载有:
- (void)viewDidLoad {
[super viewDidLoad];
[self.webView loadHTMLString:@"<input type=\"file\" accept=\"image/*;capture=camera\">" baseURL:nil];
}
Run Code Online (Sandbox Code Playgroud)
当尝试使用模态UIWebViewXcode在控制台中打印以下内容并解除应用模式:
Warning: Attempt to present <UIImagePickerController: 0x150ab800> on <ViewController2: 0x14623580> whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud)
我目前的理论是,在改变UIActionSheet到UIAlertController有可能产生这种情况,但它是非常难以证明.为了以防万一,我将与Apple一起打开雷达.
有人找到了相同的情况和一些解决方法吗?
我正在努力将图像上传到服务器,因为有很多关于通过AFNetworking和NSURLSession上传图像的问题以及其他上传所有我想问的方法是我没有找到解释关于事情是如何工作以及在幕后发生了什么的整个概念我在搜索youtube时也可以在Swift中找到所有的东西并且完全不相信我的结果我发现这个答案对我来说很熟悉
//Init the NSURLSession with a configuration
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
//Create an URLRequest
NSURL *url = [NSURL URLWithString:@"yourURL"];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
//Create POST Params and add it to HTTPBody
NSString *params = @"api_key=APIKEY&email=example@example.com&password=password";
[urlRequest setHTTPMethod:@"POST"];
[urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];
//Create task
NSURLSessionDataTask *dataTask = [defaultSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
//Handle your response here
}];
[dataTask resume];
Run Code Online (Sandbox Code Playgroud)
关于这个话题最受欢迎的答案是用户XJones: -
Here's code …Run Code Online (Sandbox Code Playgroud) 更新到iOS 8.0后,单击"选择文件"按钮(HTML文件输入),然后单击"拍摄照片或视频"/"选择现有"会导致我的应用程序崩溃.
自iOS 6以来,此功能一直运行良好,但在iOS 8.0中,文件输入功能完全被破坏!
有没有其他人遇到UIWebView应用程序相同的问题?
我想从iphone发布/共享图像到服务器.图像已准备好分享.我使用以下代码使用大多数网站显示的方式
NSData *imageData = UIImageJPEGRepresentation(image, 100);
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"0x0hHai1CanHazB0undar135";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding: NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"imageToAttach\"; filename=\"%@\"\r\n",fileName]dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Type: image/jpeg\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[request setHTTPBody:body];
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
NSLog(@"%@",returnString);
Run Code Online (Sandbox Code Playgroud)
但它给了我一些内部服务器错误,然后我指出服务器要求图像的流字节..如何将图像转换为流然后将该流发布到服务器?
ios ×5
objective-c ×5
iphone ×4
uiwebview ×2
xcode ×2
file-upload ×1
http-post ×1
ios8 ×1
ipad ×1
networking ×1
nsdata ×1
nsurlrequest ×1
nsurlsession ×1
post ×1