Smalltalk 如何将画布图像数据作为附件发送到Pharo上的服务器?

Smalltalk 如何将画布图像数据作为附件发送到Pharo上的服务器?,smalltalk,pharo,gnu-smalltalk,pharo-5,pharo-6,Smalltalk,Pharo,Gnu Smalltalk,Pharo 5,Pharo 6,我们如何向Pharo上的服务器发送或上传数据文件。我看到了一些从机器上的目录发送文件的示例。 它很好用 ZnClient新建 url:MyUrl; uploadEntityfrom:FileLocator主页/文件路径; 放 在我的情况下,我不想发送/上传在计算机上下载的文件,而是想发送/上传某个地方托管的文件或通过网络检索的数据,并将其连接到另一台服务器。 我们怎样才能做到这一点呢?基于您之前的问题,我认为您正在使用linux。这里的问题不在Smalltak/Pharo内部,而是网络映射 文

我们如何向Pharo上的服务器发送或上传数据文件。我看到了一些从机器上的目录发送文件的示例。 它很好用

ZnClient新建
url:MyUrl;
uploadEntityfrom:FileLocator主页/文件路径;
放
在我的情况下,我不想发送/上传在计算机上下载的文件,而是想发送/上传某个地方托管的文件或通过网络检索的数据,并将其连接到另一台服务器。
我们怎样才能做到这一点呢?

基于您之前的问题,我认为您正在使用linux。这里的问题不在Smalltak/Pharo内部,而是网络映射

文件传输协议 如果你想拥有一个ftp,别忘了它是以明文形式发送密码的,把它设置成你可以挂载它的方式。可能有很多方法可以做到这一点,但您可以尝试使用
curlftpfs
。您需要内核模块
fuse
为此,请确保已加载它。如果未加载,您可以通过
modprobe fuse
进行加载

其用途是:

curlftpfs ftp.yoursite.net /mnt/ftp/ -o user=username:password,allow_other
在这里填写用户名/密码。选项
allow\u other
允许系统中的其他用户使用您的挂载。 (有关更多详细信息,请参见arch wiki及其应用程序)

Webdav 对于webdav我将使用相同的方法,这次使用
davfs

您可以通过
mount
命令手动装载它:

mount -t davfs https://yoursite.net:<port>/path /mnt/webdav
您可以创建systemd automount装置来设置超时时间:

/etc/systemd/system/mnt webdav服务。自动装载

[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
[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
创建机密文件以存储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
对于用户安装:

# 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文件也在那里生成

一个快速而肮脏的解决方案是使用上面的mentined和shell命令:

使用ftp例如:

| commandOutput |

commandOutput := (PipeableOSProcess command: 'curlftpfs ftp.yoursite.net /mnt/ftp/ -o user=username:password,allow_other') output.
Transcript show: commandOutput.
另一种方法更明智。是通过使用Pharo
FTP
WebDav
支持

要仅加载ftp,请执行以下操作:

Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    load.
#ConfigurationOfFileSystemNetwork asClass project stableVersion load: 'FTP'
Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    load.
#ConfigurationOfFileSystemNetwork asClass project stableVersion load: 'Webdav'
要仅加载Webdav,请执行以下操作:

Gofer it
    smalltalkhubUser: 'UdoSchneider' project: 'FileSystemNetwork';
    configuration;
    load.
#ConfigurationOfFileSystemNetwork asClass project stableVersion load: 'FTP'
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.
| ftpConnection wDir文件|
“开放连接”
ftpConnection:=文件系统ftp:'ftp://your_ftp'.
“正在获取工作目录”
wDir:=FTP连接工作目录。

文件:='/您希望如何通过网络发送文件?smb共享、webdav、ftp、NFS或其他方式?你能更具体一点吗?使用ftp或webdav@当答案符合你的需要时,请不要忘记接受。谢谢。在我的例子中,我检索了一个保存到变量中的json文件。使用fileLocator,我似乎无法分配此目录way@ludo啊,这和我想象的完全不同。你的问题能说得更具体些吗。您如何获取您的
json
文件以及打算如何使用它。是的,当然。我有一块画布,可以画一个矩形。然后使用Pharo,我可以收集这个矩形的跳线,并将其转换为json。现在我需要使用PUT请求将这个json作为附件发送或上传到服务器。这里我有一个包含Json的变量。@ludo好的,你有什么地方可以将连接信息存储到FTP或WebDav?我通常会使用一个简单的ZnClient,但是我不知道如何附加Json数据。