2009-10-08 37 views
22

Tôi muốn triển khai một phần chức năng trong ứng dụng của mình để tải lên và thao tác các tệp trên máy chủ WebDAV. Tôi đang tìm một thư viện Python trưởng thành sẽ cung cấp một giao diện tương tự như các mô-đun os.* để làm việc với các tệp từ xa. Googling đã bật lên một loạt các tùy chọn cho WebDAV trong Python, nhưng tôi muốn biết được sử dụng rộng rãi hơn những ngày này.Thư viện ứng dụng khách Python cho WebDAV

Trả lời

1

Tôi không biết cụ thể nhưng, tùy thuộc vào nền tảng của bạn, có thể đơn giản hơn để gắn kết và truy cập các tệp được phân phát qua WebDAV thông qua hệ thống tệp. Có davfs2 ngoài đó và một số hệ điều hành, như Mac OS X, có hỗ trợ hệ thống tệp WebDAV được tích hợp.

+0

Vâng, đó chắc chắn là một tùy chọn khác. Nếu tôi sẽ gắn nó, tôi cũng có thể sử dụng NFS, nhưng gắn kết là những gì tôi đã cố gắng tránh bằng cách sử dụng WebDAV ở nơi đầu tiên. –

+0

+1 cho giải pháp gắn kết. Đây là cách giải quyết vấn đề Unix. @Kamil Các đối số của bạn chống lại việc gắn kết để bạn quyết định tìm một thư viện WebDAV là gì? –

+1

-1 Gắn kết các hệ thống tập tin mạng như s3, dav, sshfs không được xây dựng với cách sử dụng như vậy (so với NFS/SMB) đang bao giờ xảy ra vấn đề trong thực tế. Lỗi mạng tạm thời thường rất kém được truyền đạt đến ứng dụng hoặc gây ra sự khóa. Truy cập patters không được dự đoán bởi nhà phát triển trình điều khiển yêu cầu bắt tay rộng rãi với máy chủ và do đó không thể chấp nhận độ trễ, trên bộ nhớ cache bên khác có xu hướng gây ra mâu thuẫn. – Juraj

9

Tôi chỉ có nhu cầu tương tự và kết thúc thử nghiệm một vài ứng dụng WebDAV Python cho các nhu cầu của tôi (tải lên và tải xuống các tệp từ máy chủ WebDAV). Dưới đây là tóm tắt trải nghiệm của tôi:

1) Tài khoản đã làm việc cho tôi là python-webdav-lib.

Không có nhiều tài liệu, nhưng xem nhanh mã (cụ thể là ví dụ) là đủ để tìm ra cách làm cho nó hoạt động cho tôi.

2) PyDAV 0.21 (bản phát hành mới nhất mà tôi tìm thấy) không hoạt động với Python 2.6 vì nó sử dụng chuỗi làm ngoại lệ. Tôi đã không cố gắng sửa lỗi này, mong đợi thêm sự không tương thích sau này.

3) davclient 0.2.0. Tôi nhìn vào nó nhưng didn của khám phá thêm nữa bởi vì các tài liệu đã không đề cập đến mức API tôi đang tìm kiếm (tải lên tập tin và tải về).

4) Python_WebDAV_Library-0.3.0. Dường như không có bất kỳ chức năng tải lên nào.

+1

thx để phân tích, có thể một số thứ đã thay đổi sice - 1) python-webdav-lib và Python_WebDAV_Library-0.3.0 giống hệt nhau – mykhal

+2

python-webdav-lib được tham chiếu ở trên - hoạt động rất tốt cho tôi và là một câu trả lời hay hơn/hữu ích hơn nhiều hơn cái được chấp nhận. –

43

Thật đáng buồn vì câu hỏi này ("Thư viện webdav Python sử dụng?"), Để đảm bảo quyền lợi nhiều hơn một người, câu trả lời không liên quan đã được chấp nhận ("không sử dụng thư viện webdav Python"). Vâng, vấn đề phổ biến trên Stackexchange.

Đối với những người sẽ tìm kiếm câu trả lời thực và đưa ra các yêu cầu trong câu hỏi gốc (API đơn giản tương tự như mô-đun "os"), tôi có thể đề xuất easywebdav, API này rất dễ dàng và thậm chí thực hiện tốt đẹp và đơn giản, cung cấp tải lên/tải xuống và vài phương pháp quản lý tệp/dir. Do thực hiện đơn giản, nó cho đến nay không hỗ trợ danh sách thư mục, nhưng lỗi cho đó là filed và tác giả dự định thêm nó.

+2

Danh sách thư mục đã được triển khai khi bạn có thể xem https://github.com/amnong/easywebdav/pull/4. – Impiastro

+0

Thư viện này hoạt động rất tốt. Chỉ cần thử nghiệm trên Mavericks: ls, tải xuống, tải lên và thậm chí có một "gửi" chức năng riêng tư để bạn có thể gửi yêu cầu nhận được tùy ý. Làm việc cho tôi và nó là python :) – chrisallick

+1

Thật không may nó không có hỗ trợ Python 3, và kéo yêu cầu không được xử lý. Vẫn đang tìm kiếm giải pháp thay thế tốt ... – blootsvoets

2
import easywebdav 

webdav = easywebdav.connect(
    host='dav.dumptruck.goldenfrog.com', 
    username='_snip_', 
    port=443, 
    protocol="https", 
    password='_snip_') 

_file = "test.py" 

print webdav.cd("/dav/") 
# print webdav._get_url("") 
# print webdav.ls() 
# print webdav.exists("/dav/test.py") 
# print webdav.exists("ECS.zip") 
# print webdav.download(_file, "./"+_file) 
print webdav.upload("./test.py", "test.py") 
0

Install:

$ sudo apt-get install libxml2-dev libxslt-dev python-dev 
$ sudo apt-get install libcurl4-openssl-dev python-pycurl 
$ sudo easy_install webdavclient 

Ví dụ:

import webdav.client as wc 

options = { 
    'webdav_hostname': "https://webdav.server.ru", 
    'webdav_login': "login", 
    'webdav_password': "password" 
} 

client = wc.Client(options) 

client.check("dir1/file1") 
client.info("dir1/file1") 

files = client.list() 
free_size = client.free() 

client.mkdir("dir1/dir2") 
client.clean("dir1/dir2") 

client.copy(remote_path_from="dir1/file1", remote_path_to="dir2/file1") 
client.move(remote_path_from="dir1/file1", remote_path_to="dir2/file1") 

client.download_sync(remote_path="dir1/file1", local_path="~/Downloads/file1") 
client.upload_sync(remote_path="dir1/file1", local_path="~/Documents/file1") 
client.download_async(remote_path="dir1/file1", local_path="~/Downloads/file1", callback=callback) 
client.upload_async(remote_path="dir1/file1", local_path="~/Documents/file1", callback=callback) 

link = client.publish("dir1/file1") 
client.unpublish("dir1/file1") 

Links:

  • Source code here
  • gói 01.
Các vấn đề liên quan