Исходя из ваших предыдущих вопросов, я предполагаю, что вы используете 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
Существует два разумных способа его настройки - 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 вы даже можете безопасно хранить учетные данные:
Создайте файл секретов для хранения учетных данных для 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.
Другой подход более разумный. Используется ли поддержка Pharo FTP
или WebDav
через FileSystemNetwork .
Для загрузки 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 будет похожим