iOS开发之结合asp.net webservice实现文件上传下载
iOS开发中会经常用到文件上传下载的功能,这篇文件将介绍一下使用asp.net webservice实现文件上传下载。
首先,让我们看下文件下载。
这里我们下载cnblogs上的一个zip文件。使用NSURLRequest+NSURLConnection可以很方便的实现这个功能。
同步下载文件:
NSString *urlAsString =@"http://files.cnblogs.com/zhuqil/UIWebViewDemo.zip"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSError *error = nil; NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];/* 下载的数据 */if (data != nil){ NSLog(@"下载成功");if ([data writeToFile:@"UIWebViewDemo.zip" atomically:YES]) { NSLog(@"保存成功."); }else { NSLog(@"保存失败."); } } else { NSLog(@"%@", error); }
异步下载文件:
- (void)viewDidLoad{ [super viewDidLoad];//文件地址 NSString *urlAsString =@"http://files.cnblogs.com/zhuqil/UIWebViewDemo.zip"; NSURL *url = [NSURL URLWithString:urlAsString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSMutableData *data = [[NSMutableData alloc] init]; self.connectionData = data; [data release]; NSURLConnection *newConnection = [[NSURLConnection alloc] initWithRequest:requestdelegate:self startImmediately:YES]; self.connection = newConnection; [newConnection release];if (self.connection != nil){ NSLog(@"Successfully created the connection"); } else { NSLog(@"Could not create the connection"); }} - (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"An error happened"); NSLog(@"%@", error);}- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"Received data"); [self.connectionData appendData:data];}- (void) connectionDidFinishLoading:(NSURLConnection *)connection{/* 下载的数据 */ NSLog(@"下载成功");if ([self.connectionData writeToFile:@"UIWebViewDemo.zip" atomically:YES]) { NSLog(@"保存成功."); }else { NSLog(@"保存失败."); } /* do something with the data here */}- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ [self.connectionData setLength:0];} - (void) viewDidUnload{ [super viewDidUnload]; [self.connection cancel]; self.connection = nil; self.connectionData = nil;}
从上面两段代码中可以看到同步与异步下载的区别,大部分时候我们使用异步下载文件。在asp.net webservice中可以将文件的地址返回到iOS系统,iOS系统在去请求下载该文件。
上传文件
我们先使用VB.Net写一个webservice方法,用于接收上传上来的文件数据,代码如下。
<WebMethod(Description:="上传文件!")> _
Public Function UploadFile() As XmlDocumentDim doc As XmlDocument = New XmlDocument()TryDim postCollection As HttpFileCollection = Context.Request.FilesDim aFile As HttpPostedFile = postCollection("media")aFile.SaveAs(Server.MapPath(".") + "/" + Path.GetFileName(aFile.FileName))doc.LoadXml("<xml>ok</xml>")Return docCatch ex As Exceptiondoc.LoadXml("<xml>fail</xml>")Return docEnd TryEnd Function
文件上传接口
定义一个类PicOperation用于处理上传图片:
@interface PicOperation : NSOperation
{UIImage *theImage;
}
@property (retain) UIImage *theImage;
@end
//
// PicOperation.m
// DownLoading
//
// Created by skylin zhu on 11-7-30.
// Copyright 2011年 mysoft. All rights reserved.
//#import "PicOperation.h"#define NOTIFY_AND_LEAVE(X) {[self cleanup:X]; return;}
#define DATA(X) [X dataUsingEncoding:NSUTF8StringEncoding]// Posting constants
#define IMAGE_CONTENT @"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n"
#define STRING_CONTENT @"Content-Disposition: form-data; name=\"%@\"\r\n\r\n"
#define MULTIPART @"multipart/form-data; boundary=------------0x0x0x0x0x0x0x0x"@implementation PicOperation
@synthesize theImage;//创建postdata
- (NSData*)generateFormDataFromPostDictionary:(NSDictionary*)dict
{id boundary = @"------------0x0x0x0x0x0x0x0x";NSArray* keys = [dict allKeys];NSMutableData* result = [NSMutableData data];for (int i = 0; i < [keys count]; i++) {id value = [dict valueForKey: [keys objectAtIndex:i]];[result appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];if ([value isKindOfClass:[NSData class]]) {// handle image dataNSString *formstring = [NSString stringWithFormat:IMAGE_CONTENT, [keys objectAtIndex:i]];[result appendData: DATA(formstring)];[result appendData:value];}else {// all non-image fields assumed to be stringsNSString *formstring = [NSString stringWithFormat:STRING_CONTENT, [keys objectAtIndex:i]];[result appendData: DATA(formstring)];[result appendData:DATA(value)];}NSString *formstring = @"\r\n";[result appendData:DATA(formstring)];}NSString *formstring =[NSString stringWithFormat:@"--%@--\r\n", boundary];[result appendData:DATA(formstring)];return result;
}
//上传图片
- (NSString *) UpLoading
{if (!self.theImage)NOTIFY_AND_LEAVE(@"Please set image before uploading.");NSMutableDictionary* post_dict = [[NSMutableDictionary alloc] init];[post_dict setObject:@"Posted from iPhone" forKey:@"message"];[post_dict setObject:UIImageJPEGRepresentation(self.theImage, 0.75f) forKey:@"media"];NSData *postData = [self generateFormDataFromPostDictionary:post_dict];[post_dict release];NSString *baseurl = @"http://10.5.23.121:7878/WorkflowService.asmx/UploadFile"; NSURL *url = [NSURL URLWithString:baseurl];NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];if (!urlRequest) NOTIFY_AND_LEAVE(@"Error creating the URL Request");[urlRequest setHTTPMethod: @"POST"];[urlRequest setValue:MULTIPART forHTTPHeaderField: @"Content-Type"];[urlRequest setHTTPBody:postData];// Submit & retrieve resultsNSError *error;NSURLResponse *response;NSLog(@"Contacting TwitPic....");NSData* result = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];if (!result){[self cleanup:[NSString stringWithFormat:@"Submission error: %@", [error localizedDescription]]];return;}// Return resultsNSString *outstring = [[[NSString alloc] initWithData:result encoding:NSUTF8StringEncoding] autorelease];return outstring;
}
@end
这里我主要定义了两个方法,一个是generateFormDataFromPostDictionary用于创建post form data,一个是UpLoading供调用的类上传图片,这个类需要一个UIimage的对象。
类定义好了,上传图片就非常方便了,看下面代码:
PicOperation *pic = [[PicOperation alloc] init];pic.theImage=[UIImage imageNamed:@"meinv4.jpg"];;NSString *result = [pic UpLoading];NSLog(result);
总结:这篇文章讲述了如何在iOS中结合asp.net webservice实现文件的上传和下载功能。
(全文完)
以下为广告部分
您部署的HTTPS网站安全吗?
如果您想看下您的网站HTTPS部署的是否安全,花1分钟时间来 myssl.com 检测以下吧。让您的HTTPS网站变得更安全!
SSL检测评估
快速了解HTTPS网站安全情况。
安全评级(A+、A、A-...)、行业合规检测、证书信息查看、证书链信息以及补完、服务器套件信息、证书兼容性检测等。
SSL证书工具
安装部署SSL证书变得更方便。
SSL证书内容查看、SSL证书格式转换、CSR在线生成、SSL私钥加解密、CAA检测等。
SSL漏洞检测
让服务器远离SSL证书漏洞侵扰
TLS ROBOT漏洞检测、心血漏洞检测、FREAK Attack漏洞检测、SSL Poodle漏洞检测、CCS注入漏洞检测。
转载于:https://www.cnblogs.com/zhuqil/archive/2011/07/30/2122019.html
iOS开发之结合asp.net webservice实现文件上传下载相关推荐
- IOS开发基础之使用AFNetworking框架实现文件上传get和post请求
IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...
- WebService实现文件上传下载
一:服务端:一个普通java web工程 package com.wzh.file;import com.sun.xml.ws.developer.StreamingAttachment; impor ...
- Vue + Element+ ASP.NET Core WebAPI 文件上传下载
以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备asp.net后端文件上传的API Uplo ...
- android 文件上传工具类,Android快速开发架构PlanA(五),文件上传下载了解一下...
1.PlanA文件上传&下载的使用 PlanA架构集成第五篇,文件上传下载的使用,文件上传&下载在APP里面随处可见,发朋友圈要上传图片或者短视频,换个头像要上传选择的图片,offic ...
- webservice文件上传下载
使用DataHandler实现webservice的文件上传下载 服务端代码: package com.hello.weChat.controller;import javax.activation. ...
- .NET技术 ASP.NET中常用的文件上传下载方法(多文件上传)
文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以 ...
- ASP.NET中文件上传下载方法集合
asp.net 2008-08-23 21:10:35 阅读0 评论0 字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...
- ASP.NET中常用的文件上传下载方法
ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务 ...
- [转]ASP.NET中常用的文件上传下载方法
1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以及下载方法 4.上传Internet上的资源 第一部分: 首先我们来说一下如何解决ASP.NET ...
最新文章
- 3大主流前端框架对比
- Linux下动态共享库加载时的搜索路径详解
- SqlServerManagement新建数据库并执行sql文件流程
- 【送书】2021年哪些好书值得读(小姐姐配音)
- C++ floor、ceil、round函数的区别
- 拼多多砍价小程序源码 流量主系列
- Register code
- 蓝牙通信-打开和关闭蓝牙设备
- break、continue
- 14. Thinking carefullly about copying behavior in resource-managing classes
- redis和couchbase的比较
- sensor曝光量和曝光行的区别_求教:关于lcd和sensor的几个问题和讨论
- python报表自动化系列 - 获得指定目录下所有文件名
- 视频教程-学matlab符号计算-Matlab
- could not extract ResultSet 错误
- linux 教程 习题,Linux练习题分享,linux练习题
- html肤质测试,皮肤致敏试验
- UNITER: UNiversal Image-TExt Representation Learning
- Charles手机端抓包,抓取小说软件整本小说的示例
- java字符实体_java转换 HTML字符实体,java特殊字符转义字符串(示例代码)
热门文章
- 支付宝“刷脸支付”韩国遇冷 真相让人笑出眼泪
- 计算机管理记事本,电脑记事本软件
- Matlab对BPSK与QPSK进行仿真,BPSKQPSK的MATLAB仿真
- 军犬舆情每日热点:LIGO发现最大黑洞;智能锁广告侮辱拆弹战士
- NFT Insider #87:The Sandbox 收购游戏开发工作室 Sviper,GHST 大迁徙即将拉开帷幕
- __getattr__和__setattr__
- 企业物联网平台如何选择?
- 前端——CSS部分总结
- 怀化学院计算机不过能毕业吗,面对困境,你会如何选择?
- notepad++的下载及安装HEX-Editor插件