我们如何将数据文件发送或上传到 Pharo 上的服务器。我看到了一些从机器上的目录发送文件的例子。它工作正常。
ZnClient new
url: MyUrl;
uploadEntityfrom: FileLocator home /Path to the file;
put
在我的情况下,我不想发送/上传在机器上下载的文件,而是想发送/上传托管在某处的文件或我通过网络检索的数据并将其发送到另一台服务器。我们怎样才能做到这一点?
我们如何将数据文件发送或上传到 Pharo 上的服务器。我看到了一些从机器上的目录发送文件的例子。它工作正常。
ZnClient new
url: MyUrl;
uploadEntityfrom: FileLocator home /Path to the file;
put
在我的情况下,我不想发送/上传在机器上下载的文件,而是想发送/上传托管在某处的文件或我通过网络检索的数据并将其发送到另一台服务器。我们怎样才能做到这一点?
根据您之前的问题,我认为您使用的是 linux。这里的问题不在于 Smalltak/Pharo,而在于网络映射。
如果你想拥有一个ftp,不要忘记它是以明文形式发送密码,设置它以安装它。可能有很多方法可以做到这一点,但您可以尝试使用curlftpfs
. 你需要内核模块fuse
,确保你已经加载了它。如果未加载,您可以通过modprobe fuse
.
用法是:
curlftpfs ftp.yoursite.net /mnt/ftp/ -o user=username:password,allow_other
在哪里填写用户名/密码。该选项allow_other
允许系统中的其他用户使用您的挂载。(有关更多详细信息,您可以查看 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 自动挂载单元来设置超时:
/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
用于用户和/etc/davfs2/secrets
root 的 WebDAV 服务的凭据:
/etc/davfs2/secrets
https://webdav.example/path davusername davpassword
确保秘密文件包含正确的权限,用于根挂载:
# 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使用 PharoFTP
或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将是类似的。