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

时间:2018-09-03 12:40:04

标签: smalltalk pharo gnu-smalltalk pharo-5 pharo-6

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

public function store(Request $req)
{
  $datas = $req->except(['_token', 'account_head.null', 'description.null', 'amount.null']);

  $countR = count($datas['account_head']);
  $validated = [];
  $cv = 0;
  for ($i=0; $i < $countR; $i++) {
    if($datas['account_head'][$i] == null) continue;
    else if($datas['amount'][$i] == null) continue;

    $validated['account_head'][$cv] = $datas['account_head'][$i];
    $validated['description'][$cv] = $datas['description'][$i];
    $validated['amount'][$cv] = $datas['amount'][$i];
    $cv++;
  }

  return $validated;
}

在我的情况下,我不想发送/上传在计算机上下载的文件,而是想发送/上传在某处托管的文件或通过网络检索到的数据,并将其附加到另一台服务器。 我们该怎么做?

1 个答案:

答案 0 :(得分:3)

根据您先前的问题,我想您正在使用linux。这里的问题不在Smalltak / Pharo中,而是在网络映射中。

FTP

如果您要使用 ftp ,请不要忘记它以纯文本格式发送密码,并以一种可挂载密码的方式进行设置。可能有很多方法可以执行此操作,但是您可以尝试使用curlftpfs。为此,您需要内核模块fuse,请确保已加载它。如果未加载,则可以通过modprobe fuse进行加载。

用法为:

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

填写用户名 / 密码的位置。选项allow_other允许系统上的其他用户使用您的安装。 (有关更多详细信息,请参见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

您可以创建一个系统自动挂载单元来设置超时

/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,您甚至可以安全地存储凭据:

创建一个秘密文件来存储WebDAV服务的凭据,其中~/.davfs2/secrets用于用户,/etc/davfs2/secrets用于root:

/etc/davfs2/secrets

https://webdav.example/path davusername davpassword

确保密码文件包含正确的权限(用于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 类似。