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:request
delegate: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  XmlDocument
         Dim  doc As  XmlDocument = New  XmlDocument()
         Try
             Dim  postCollection As  HttpFileCollection = Context.Request.Files
             Dim  aFile As  HttpPostedFile = postCollection( "media" )
             aFile.SaveAs(Server.MapPath( "." ) + "/"  + Path.GetFileName(aFile.FileName))
             doc.LoadXml( "<xml>ok</xml>" )
             Return  doc
         Catch  ex As  Exception
             doc.LoadXml( "<xml>fail</xml>" )
             Return  doc
         End  Try
     End  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 data
             NSString  *formstring = [ NSString  stringWithFormat:IMAGE_CONTENT, [keys objectAtIndex:i]];
             [result appendData: DATA(formstring)];
             [result appendData:value];
         }
         else
         {
             // all non-image fields assumed to be strings
             NSString  *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 results
     NSError  *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 results
     NSString  *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实现文件的上传和下载功能。

 





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2011/07/30/2122019.html,如需转载请自行联系原作者

相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
92 3
|
2月前
|
开发框架 前端开发 .NET
ASP.NET WEB——项目创建与文件上传操作
ASP.NET WEB——项目创建与文件上传操作
46 0
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
26 0
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
40 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
10天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
12 0
|
25天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
1月前
|
XML 开发框架 .NET
C# .NET面试系列八:ADO.NET、XML、HTTP、AJAX、WebService
## 第二部分:ADO.NET、XML、HTTP、AJAX、WebService #### 1. .NET 和 C# 有什么区别? .NET(通用语言运行时): ```c# 定义:.NET 是一个软件开发框架,提供了一个通用的运行时环境,用于在不同的编程语言中执行代码。 作用:它为多语言支持提供了一个统一的平台,允许不同的语言共享类库和其他资源。.NET 包括 Common Language Runtime (CLR)、基础类库(BCL)和其他工具。 ``` C#(C Sharp): ```c# 定义: C# 是一种由微软设计的面向对象的编程语言,专门为.NET 平台开发而创建。 作
177 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
204 2