簡體   English   中英

我們如何將畫布圖像數據作為附件發送到Pharo上的服務器?

[英]How do we send a canvas image data as an attachment to a server on Pharo?

我們如何將數據文件發送或上傳到Pharo上的服務器。 我看到了一些從機器上的目錄發送文件的例子。 它工作正常。

ZnClient new
  url: MyUrl;
  uploadEntityfrom: FileLocator home /Path to the file;
  put

在我的情況下,我不想發送/上傳在機器上下載的文件,而是我想發送/上傳托管在某處的文件或我通過網絡檢索的數據並將其發送到另一台服務器。 我們怎么做?

基於您之前的問題,我認為您使用的是Linux。 這里的問題不在Smalltak / Pharo中,而是在網絡映射中。

FTP

如果你想擁有一個ftp ,不要忘記它是以明文形式發送密碼,設置它可以安裝它。 可能有很多方法可以做到這一點,但你可以嘗試使用curlftpfs 你需要內核模塊fuse ,確保你已加載它。 如果未加載,您可以通過modprobe fuse進行modprobe fuse

用法是:

curlftpfs ftp.yoursite.net /mnt/ftp/ -o user=username:password,allow_other

你填寫用戶名 / 密碼的地方 allow_other選項允許系統中的其他用戶使用您的mount。 (有關更多詳細信息,您可以看到arch wiki及其curlftpfs

WebDAV的

對於webdav,我會使用相同的方法,這次使用davfs

您可以通過mount命令手動安裝它:

mount -t davfs https://yoursite.net:<port>/path /mnt/webdav

設置它有兩種合理的方法systemdfstab 以下信息來自davfs2 Arch wiki:

對於systemd

/etc/systemd/system/mnt-webdav-service.mount

[Unit]
Description=Mount WebDAV Service
After=network-online.target
Wants=network-online.target

[Mount]
What=http(s)://address:<port>/path
Where=/mnt/webdav/service
Options=uid=1000,file_mode=0664,dir_mode=2775,grpid
Type=davfs
TimeoutSec=15

[Install]
WantedBy=multi-user.target

您可以創建systemd automount單元來設置超時

/etc/systemd/system/mnt-webdav-service.automount

[Unit]
Description=Mount WebDAV Service
After=network-online.target
Wants=network-online.target

[Automount]
Where=/mnt/webdav
TimeoutIdleSec=300

[Install]
WantedBy=remote-fs.target

對於fstab方式,如果您之前已編輯過fstab (它的行為與任何其他fstab條目相同),則很容易:

/etc/fstab

https://webdav.example/path /mnt/webdav davfs rw,user,uid=username,noauto 0 0

對於webdav,您甚至可以安全地存儲憑據:

使用~/.davfs2/secrets for user和/etc/davfs2/secrets for root創建一個秘密文件來存儲WebDAV服務的憑據:

/etc/davfs2/secrets

https://webdav.example/path davusername davpassword

確保secretts文件包含正確的權限,用於root安裝:

# chmod 600 /etc/davfs2/secrets
# chown root:root /etc/davfs2/secrets

並為用戶安裝:

$ chmod 600 ~/.davfs2/secrets

返回Pharo / Smalltalk代碼:

我認為您已閱讀上述內容並安裝了/ mnt / ftp/ mnt / webdav

對於例如ftp,您的代碼只需從安裝目錄中獲取:

ZnClient new
  url: MyUrl;
  uploadEntityfrom: FileLocator '/mnt/ftp/your_file_to_upload';
  put

編輯基於評論。

問題是ZnClient的配置在Pharo本身,並且json文件也在那里生成。

一個快速而骯臟的解決方案 - 將使用以上命令與shell命令:

ftp為例:

| commandOutput |

commandOutput := (PipeableOSProcess command: 'curlftpfs ftp.yoursite.net /mnt/ftp/ -o user=username:password,allow_other') output.
Transcript show: commandOutput.

其他方法更明智。 是通過FileSystemNetwork使用Pharo FTPWebDav支持。

僅加載ftp

Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    load.
#ConfigurationOfFileSystemNetwork asClass project stableVersion load: 'FTP'

僅加載Webdav

Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    load.
#ConfigurationOfFileSystemNetwork asClass project stableVersion load: 'Webdav'

獲得包括測試在內的一切:

Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    loadStable.

有了它你應該能夠獲得一個文件,例如ftp

| ftpConnection wDir file |

"Open a connection"
ftpConnection := FileSystem ftp: 'ftp://ftp.sh.cvut.cz/'.
"Getting working directory"
wDir := ftpConnection workingDirectory.
file := '/Arch/lastsync' asFileReference.
"Close connection - do always!"
ftpConnection close.

然后您通過( ftp )上傳將如下所示:

| ftpConnection wDir file |

"Open connection"
ftpConnection := FileSystem ftp: 'ftp://your_ftp'.
"Getting working directory"
wDir := ftpConnection workingDirectory.
file := '/<your_file_path' asFileReference.
ZnClient new
     url: MyUrl;
     uploadEntityfrom: FileLocator file;
     put
"Close connection - do always!"
ftpConnection close.

Webdav會是類似的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM