石锅拌饭

iPhone / iPod Touch 文件传输解决方案 – Cocoa Web Resource Project

by Robin Lu on Dec.01, 2008, about , ,

到目前为止,也就是iPhone SDK 2.2 ,苹果仍然没有为开发者提供一个文件传输的解决方案。如果一个应用需要为用户提供往iPhone上传文件的功能,大抵会采用下面几种方法之一:

  1. 通过一个链接从网上下载。
  2. 提供一个客户端,通过自己的协议上传。
  3. 支持FTP传输协议。
  4. 在iPhone上启动一个http服务,通过浏览器上传。
  5. 比上一个更进一步,在http上支持WebDAV,通过改协议上传。

上面这些方法各有利弊。前两种方式虽然开发比较简单,但用户操作不方便,采用的比较少了。使用FTP在一些系统上还是需要额外的客户端软件,也不算方便。WebDAV的方式现在比较流行,Air Sharing和Discover都采用了这种方式。

在做iPhone版iChm时,也需要提供文件上传的功能。我选择了第四个方案,即提供一个http service,通过浏览器上传。这个方案虽然不能象WebDAV那样在一些系统上直接mount到文件系统中,但对于几乎所有带浏览器的系统,它都不需要再安装额外的客户端,实现起来也比WebDAV简单很多。

在http server的选择上,可以porting现有的成熟产品,但是对于这样的应用,apache或者lighttpd等方案都过于庞杂了,实际上只是需要一个很简单的服务。最后找到cocoahttpserver,是由Deusty Designs开源的一个项目,支持异步socket,IPv4和IPv6,HTTP Authentication和TLS加密,小巧玲珑。除了只支持GET方法这一点以外,其他可以说该有的都有,该没有的都没有了。

我对cocoahttpserver做了扩展,首先实现了Multipart POST的支持。在增加文件传输功能的设计上,我将文件当作一个资源(resources),采用了REST的方式:

方法 功能
GET 文件列表,文件下载
POST 上传新文件
DELETE 文件删除

这样的设计,无论从接口的角度,还是从实现的角度,都比较清晰明了。

在iChm 1.0发布后做了些修正,iChm 1.0.1后相对稳定了。现在我将文件传输这部分代码open source出来:
Cocoa Web Resource Project
主要功能如下:

  • 支持通过浏览器向iPhone/iPod Touch上传文件,支持文件下载和删除。
  • 内存优化,支持大文件上传。
  • 可定制的web界面。
  • web界面支持IE, Safari, Firefox等主流浏览器。
  • RESTful API。

希望可以对iPhone开发者有所帮助。

:, ,

6 Comments for this entry

  • Sparkle

    WebDAV也不需要额外的客户端,xp本身支持,很多人不知道而已,可以在网上邻居直接添加。至于开发难度,Discover也是用别人的lib实现的,调用一下而已。其实正确来说,Discover同时支持你说的4和5,不过5是基于4的,所以或许你迟点就会加上WebDAV了吧,呵呵

  • fcicq

    还没更新到 1.1, 正在用 ichm 1.01 的说句话.
    偶是用 ln -s ichm.app/Documents /var/mobile , 然后直接 ssh/sftp 传文件至 /var/mobile 的.
    ichm 的文件选择器就把 /var/mobile 下的所有文件都列出来了.

    最好像 Airsharing/mobilefinder 一样处理目录. thx.

  • Livid

    Thanks for sharing this.

  • nooidea

    确实比较头痛iphone之间的传输。。。

  • LEAF

    both airsharing and discover need wifi connection to a wireless router, we are expecting one app which could avoid this limitation.

  • Steve

    Thanks a bunch : )
    I’m planning to use it on my iphone proj

Search

Archives

Browse by tags

agile apple blog book design ecto extension firefox git google hack ichm iphone keyword life mac madfox movie nonsense opensource plugin pm ruby rubyonrails sns software startup wordpress work 财帮子