使用WebDAV来上传和下载文件

WebDAV是什么


基于Web的分布式编写和版本控制(WebDAV)是超文本传输协议(HTTP)的扩展,有利于用户间协同编辑和管理存储在万维网服务器文档。WebDAV 由互联网工程任务组的工作组在 RFC 4918 中定义。许多现代操作系统为 WebDAV 提供了内置支持。
WebDAV扩展了request方法所允许的标准HTTP谓词和HTTP头。增加的谓词包括:
COPY将资源从一个URI复制到另一个URI
LOCK锁定一个资源。WebDAV支持共享锁和互斥锁。
MKCOL创建集合(即目录)
MOVE将资源从一个URI移动到另一个URI
PROPFIND从Web资源中检索以XML格式存储的属性。它也被重载,以允许一个检索远程系统的集合结构(也叫目录层次结构)
PROPPATCH在单个原子性动作中更改和删除资源的多个属性
UNLOCK解除资源的锁定
WebDAV 协议为用户在服务器上创建、更改和移动文档提供了一个框架。WebDAV 协议最重要的功能包括:
维护作者或修改日期的属性、命名空间管理、集合和覆盖保护
维护属性包括创建、删除和查询文件信息等
命名空间管理处理在服务器名称空间内复制和移动网页的能力
集合处理各种资源的创建、删除和列举
覆盖保护处理与锁定文件相关功能
由于 WebDAV 是基于 HTTP 的,所以具有 HTTP 的所有优点,包括容易穿越防火墙、 使用 HTTPS 来传输数据,因此在很多方面可以替代 FTP。
WebDAV 可以通过 Nginx 或 Apache 等 Web 服务器部署。在客户端 WebDAV 也获得了许多软件的支持,比如 Office 就可通过 WebDAV 编辑远程文档

webdav支持哪些方法?

首先必然支持普通的HTTP1.1的一些方法:

  • GET
  • POST
  • PUT
  • DELETE
  • PROPFIND
  • PROPPATCH
  • MKCOL
  • COPY
  • MOVE
  • LOCK
  • UNLOCK

PROPFIND 和 GET

PROPFIND 是查找资源的信息,并不包括资源的内容。而 GET 方法是直接返回资源的具体内容。在PROPFIND中,你可以指定返回资源的哪些属性信息,也可以返回资源的所有属性信息(allprop)。

PROPPATCH

对资源的某个或者某些属性进行操作,这个操作可以是增加,删除,修改等。

MKCOL

就是创建Collection,Collection的意思就是文件夹,它对应一个URI路径。这个命令创建的Collection如果事先存在,或者前置的路径不存在,都会报错。

POST

POST方法的实际作用在Webdav的协议中没有做强制定义,一般都是由具体的应用场景的Server进行定义的。

DELETE

DELETE 就是删除操作,它可以删除资源,也可以删除一个Collection。但是删除资源的时候,要求被删除的资源不能有锁。
如果是删除一个Collection,要求这个Collection。

LOCK 和 UNLOCK

对一个已经存在的资源加锁或者解锁操作。

COPY

COPY复制一个文件到目标文件夹,目标文件夹必须存在

PUT

PUT是用来更新服务器上的一个文件的,它不能作用于文件夹。

使用WebDAV来上传和下载文件

上传和下载文件,最简单的方式,应该就是直接使用SPS2003的对象模型了。但有的时候,会有一些问题:

1. SPS2003的对象模型只能本机调用。

2. 如果写一个Web应用程序,使用匿名认证,那么没有办法传用户信息认证。即使使用Impersonate,也会没有权限(至少我没有成功)。

3. 可以自己来写Web Service,远程和认证都没有问题。上传也没有问题,但下载,似乎不那么好写了。

所以,如果可以用WebDAV,会多一种选择,也能开拓我们的思路。下面是一个上传和下载的例子:

上传:

System.Uri myURi = new System.Uri(“https://server/shared document/?var1=hello");

FileStream inStream = File.OpenRead(“c:\text.txt”);

WebRequest req = WebRequest.Create(myURi);

req.Method = "PUT";

req.Timeout = System.Threading.Timeout.Infinite;

req.Credentials = CredentialCache.DefaultCredentials;

Stream outStream = req.GetRequestStream();

CopyStream(inStream, outStream);

outStream.Close();

req.GetResponse();

下载:

System.Uri myURi = new System.Uri(“https://server/share documents/text.txt”);

string sfilePath = "C:\\DownLoadedFiles\\";

sfilePath+=”test.txt”;

WebRequest req = WebRequest.Create(myURi);

req.Method = "GET";

req.Timeout = System.Threading.Timeout.Infinite;

req.Credentials = CredentialCache.DefaultCredentials;

WebResponse res = req.GetResponse();

Stream inStream = res.GetResponseStream();

FileStream fs = new FileStream(sfilePath,FileMode.OpenOrCreate);

CopyStream(inStream,fs);

inStream.Close();

代码仅供参考,其中有一些简化,可能也包含错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Murphy2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值