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实现文件上传下载相关推荐

  1. IOS开发基础之使用AFNetworking框架实现文件上传get和post请求

    IOS开发基础之使用AFNetworking框架实现文件上传get和post请求 AFNetworking框架 请自行从github官网clone.命令为 git clone xxx.xxx是项目的地 ...

  2. WebService实现文件上传下载

    一:服务端:一个普通java web工程 package com.wzh.file;import com.sun.xml.ws.developer.StreamingAttachment; impor ...

  3. Vue + Element+ ASP.NET Core WebAPI 文件上传下载

    以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载. 准备asp.net后端文件上传的API Uplo ...

  4. android 文件上传工具类,Android快速开发架构PlanA(五),文件上传下载了解一下...

    1.PlanA文件上传&下载的使用 PlanA架构集成第五篇,文件上传下载的使用,文件上传&下载在APP里面随处可见,发朋友圈要上传图片或者短视频,换个头像要上传选择的图片,offic ...

  5. webservice文件上传下载

    使用DataHandler实现webservice的文件上传下载 服务端代码: package com.hello.weChat.controller;import javax.activation. ...

  6. .NET技术 ASP.NET中常用的文件上传下载方法(多文件上传)

    文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以 ...

  7. ASP.NET中文件上传下载方法集合

    asp.net 2008-08-23 21:10:35 阅读0 评论0   字号:大中小 订阅 ASP.NET中文件上传下载方法集合 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给 ...

  8. ASP.NET中常用的文件上传下载方法

    ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括: 1.如何解决文件上传大小的限制 2.以文件形式保存到服务 ...

  9. [转]ASP.NET中常用的文件上传下载方法

    1.如何解决文件上传大小的限制 2.以文件形式保存到服务器 3.转换成二进制字节流保存到数据库以及下载方法 4.上传Internet上的资源 第一部分:     首先我们来说一下如何解决ASP.NET ...

最新文章

  1. 3大主流前端框架对比
  2. Linux下动态共享库加载时的搜索路径详解
  3. SqlServerManagement新建数据库并执行sql文件流程
  4. 【送书】2021年哪些好书值得读(小姐姐配音)
  5. C++ floor、ceil、round函数的区别
  6. 拼多多砍价小程序源码 流量主系列
  7. Register code
  8. 蓝牙通信-打开和关闭蓝牙设备
  9. break、continue
  10. 14. Thinking carefullly about copying behavior in resource-managing classes
  11. redis和couchbase的比较
  12. sensor曝光量和曝光行的区别_求教:关于lcd和sensor的几个问题和讨论
  13. python报表自动化系列 - 获得指定目录下所有文件名
  14. 视频教程-学matlab符号计算-Matlab
  15. could not extract ResultSet 错误
  16. linux 教程 习题,Linux练习题分享,linux练习题
  17. html肤质测试,皮肤致敏试验
  18. UNITER: UNiversal Image-TExt Representation Learning
  19. Charles手机端抓包,抓取小说软件整本小说的示例
  20. java字符实体_java转换 HTML字符实体,java特殊字符转义字符串(示例代码)

热门文章

  1. 支付宝“刷脸支付”韩国遇冷 真相让人笑出眼泪
  2. 计算机管理记事本,电脑记事本软件
  3. Matlab对BPSK与QPSK进行仿真,BPSKQPSK的MATLAB仿真
  4. 军犬舆情每日热点:LIGO发现最大黑洞;智能锁广告侮辱拆弹战士
  5. NFT Insider #87:The Sandbox 收购游戏开发工作室 Sviper,GHST 大迁徙即将拉开帷幕
  6. __getattr__和__setattr__
  7. 企业物联网平台如何选择?
  8. 前端——CSS部分总结
  9. 怀化学院计算机不过能毕业吗,面对困境,你会如何选择?
  10. notepad++的下载及安装HEX-Editor插件