[英]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 ,不要忘記它是以明文形式發送密碼,設置它可以安裝它。 可能有很多方法可以做到這一點,但你可以嘗試使用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,我會使用相同的方法,這次使用davfs
您可以通過mount
命令手動安裝它:
mount -t davfs https://yoursite.net:<port>/path /mnt/webdav
設置它有兩種合理的方法systemd
或fstab
。 以下信息來自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
我認為您已閱讀上述內容並安裝了/ 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 FTP
或WebDav
支持。
僅加載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.