使用WebDAV来上传和下载文件

06-01 1462阅读

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来上传和下载文件
(图片来源网络,侵删)

覆盖保护处理与锁定文件相关功能

由于 WebDAV 是基于 HTTP 的,所以具有 HTTP 的所有优点,包括容易穿越防火墙、 使用 HTTPS 来传输数据,因此在很多方面可以替代 FTP。

使用WebDAV来上传和下载文件
(图片来源网络,侵删)

WebDAV 可以通过 Nginx 或 Apache 等 Web 服务器部署。在客户端 WebDAV 也获得了许多软件的支持,比如 Office 就可通过 WebDAV 编辑远程文档

webdav支持哪些方法?

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

使用WebDAV来上传和下载文件
(图片来源网络,侵删)
  • 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();

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

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码