我们如何将数据文件发送或上传到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;
}
在我的情况下,我不想发送/上传在计算机上下载的文件,而是想发送/上传在某处托管的文件或通过网络检索到的数据,并将其附加到另一台服务器。 我们该怎么做?
答案 0 :(得分:3)
根据您先前的问题,我想您正在使用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
您可以创建一个系统自动挂载单元来设置超时:
/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
我想您已阅读上述内容,并已安装 / 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 类似。