- 积分
- 1206
- 明经币
- 个
- 注册时间
- 2011-2-11
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本教程旨在为您示范如何用WebdavClient C#语言类对AutoCAD WS账户中的文件和文件夹执行各种操作。
使用这个C#语言类,您可以——连接到一个AutoCAD WS账户上
1. 查询账户文件/文件夹结构
2. 执行不同的文件操作,例如复制、粘贴、重命名、创建文件夹
3. 上传和下载文件
4. 查询文件元数据,例如最后修改、权限、缩略图
5. 在WS在线编辑器中启动图纸文件
WebdavClient类使用WebDAV协议来和AutoCAD WS服务进行通信。WebdavClient C#语言类依靠标准的WebDAV协议来和AutoCAD WS服务进行通信。C++、C#、Java和JavaScript等多种编程语言都支持这个基于http的行业协议。
点击这里观看使用JavaScript访问AutoCAD WS的教程。
点击这里下载C语言样例应用程序源代码。
构造器
WeddavClient类构造器需要三个参数:
1. 主机:Webdav服务器地址。例如,如果您要连接到AutoCAD WS服务器,就用 “https://dav.autocadws.com”。
2. 用户名:您的AutoCAD WS账户名
3. 密码:您的账户密码
下面的代码创建出新的WebdavClient类,连接到AutoCAD WS Webdav服务器,使用的用户名是“someuser”,密码是“123456”。
WebDAVClient client = new WebdavClient("https://dav.autocadws.com", "someuser", "123456");
PROPFIND
PROPFIND方法用来在AutoCAD WS账户中检索关于文件和文件夹的信息。
PROPFIND函数接收两个参数:
1. 远程文件路径(remoteFilePath):我们想检索信息的文件夹/文件的相对路径。
2. 深度:表示该方法是仅适用于资源(深度=“0”)、仅适用于资源及其内部成员(深度=“1”),还是适用于资源及其所有成员(深度=“无限”)。
另外,记住要订阅PropfindComplete事件的回调函数。
下列代码向服务器发送PROPFIND请求,以获取直接位于‘/Site’文件夹下的所有文件/文件夹的信息。
//subscribe to the PropfindComplete event
client.PropfindComplete += new PropfindCompleteDel(PropfindResponse);
// request properties of all files/folders residing directly under the ’Site’ folder.
client.Propfind(’/Site’, 1);
在这个示例中,我们订阅了PropfindComplete事件的PropfindResponse函数。
当PROPFIND完成之后,WebdavClient就会呼叫PropfindResponse。这个函数必须有如下签名:
//responseStr is the full XML returned by the server.
//WebdavItemInfo holds partial information about each file/folder retrieved, such as its name,
//relative path and whether it is a folder or a file.
public void PropfindResponse(String folderHref, bool requestSuccessfull, int statusCode, String responseStr, List files)
我们将会展示PropfindResponse函数的实施,它会将检索到主控台的所有项的名称打印出来。我们可以从WebdavItemInfo对象获取这些名称,但是为了展示如何解析这个XML,我们将会从完整的应答XML获取这些信息。
了解PropfindResponse函数的实施之前,我们应该看看来自Webdav服务器的响应。服务器返回一个含有文件/文件夹信息的XML。下面是这种XML的一个示例:
/Site/filea.dwg
HTTP/1.1 200 OK
2011-12-01T17:42:21-08:00
filea.dwg
/Site/fileb.dwg
HTTP/1.1 200 OK
2011-12-01T17:42:21-08:00
fileb.dwg
如您所见,每个文件/文件夹均返回到“d:response”标签中。在这种情况下,服务器返回“filea.dwg”和“fileb.dwg”这两个文件的信息。服务器注明了每个文件的创建日期和文件名。
下面的代码展示的是PropfindHandler函数的实施:
public void PropfindResponse(String folderHref, bool requestSuccessfull, int statusCode,
String responseStr, List files)
{
XmlDocument xml = new XmlDocument();
xml.LoadXml(responseStr);
XmlNamespaceManager xmlNsManager = new XmlNamespaceManager(xml.NameTable);
xmlNsManager.AddNamespace("d", "DAV:");
xmlNsManager.AddNamespace("WSNS", "WS");
//each child node is a ’d:response’ node
foreach (XmlNode node in xml.DocumentElement.ChildNodes)
{
XmlNode propStatNode = node.SelectSingleNode("d:propstat", xmlNsManager);
XmlNode propsNode = propStatNode.SelectSingleNode("d:prop", xmlNsManager);
XmlNode nameNode = propsNode.SelectSingleNode("d:displayname", xmlNsManager);
String name = HttpUtility.HtmlDecode(nameNode.InnerXml);
Console.Out.WriteLine(name);
}
如果以“someuser”为用户名的账户中包含文件夹“site”,而文件夹中有“filea.dwg”和“fileb.dwg”这两个文件,那么用户会看到这些文件名打印到主控台上:
filea.dwg
fileb.dwg
复制,移动,删除,上传
复制、移动和删除的调用方式和PROPFIND方法一样,只是传递的参数有所不同。
切记,您必须要订阅相应事件(DeleteComplete、CopyComplete、MoveComplete、 UploadComplete)的回调函数。这些事件中没有响应可解析,但是用了回调函数之后,您就会在操作完成的时候得到通知,并获知操作是否成功。
下列代码:
1. copies ‘/Site/filea.dwg’ to /OtherSite/fileb.dwg’
2. moves ‘/Site/filec.dwg’ to /OtherSite/filed.dwg’
3. deletes ‘/Site/filee.dwg’
4. uploads a local file from ‘c:\fileg.dwg’ to ‘/Site/fileg.dwg’
//subscribe to theDeleteComplete , CopyComplete and MoveComplete events
client.DeleteComplete -= new DeleteCompleteDel(FSOpFinished);
client.CopyComplete -= new CopyCompleteDel(FSOpFinished);
client.MoveComplete -= new MoveCompleteDel(FSOpFinished);
client.UploadComplete -= new UploadCompleteDel(FSOpFinished);
var overwrite = true;
client.Copy("/Site/filea.dwg", "/OtherSite/fileb.dwg", overwrite);
client.Move( "/Site/filec.dwg", "/OtherSite/filed.dwg’" overwrite);
client.Delete("/Site/filee.dwg");
client.Upload("c:/fileg.dwg", "Site/fileg.dwg");
下列代码显示了FSOpFinished函数,这个函数会在成功完成请求的时候将成功信息‘success’打印到主控台,并在出错的时候将出错信息‘error’连同状态代码打印到主控台:
public void FSOpFinished(bool requestSuccessfull, int statusCode, String responseStr)
{
if(requestSuccessfull)
{
Console.Out.WriteLine("success");
}
else
{
Console.Out.WriteLine("error: " + statusCode);
}
}
在AutoCAD WS中打开图纸文件
要打开图纸文件,只需调用客户端的OpenDrawing方法,以传递图纸文件的路径:
client.OpenDrawing("/Site/filea.dwg");
下载C#语言样例应用程序源代码。
以上来自 欧特克AU技术社区http://au.autodesk.com.cn
|
|