Laravel файловая система и ftp - PullRequest
1 голос
/ 18 марта 2020

Я испытываю трудности с файловой системой Laravel. Я пытаюсь сгенерировать, сохранить и передать xml -файл в контроллере.

все, кроме ftp-передачи работает. Я подозреваю, что это потому, что я не могу получить правильный путь нового xml -файла в функции sendFilToNCS ($ fileName). Я получаю эту ошибку:

ErrorException ftp_put (/storage/1584533245.xml): не удалось открыть поток: нет такого файла или каталога

Надеюсь получить сом помощь от laravel -экспертов. Добрый день.

class ExportController extends Controller
{

    public function __construct(){
        $this->middleware('auth:admin');
    }

    public function index($id){

        $foromtale = Foromtale::find($id);
        $data = new NCSNote($foromtale);

        $xml = View::make('xmlTemplate')->with('view', $data);

        $xmlDoc = simplexml_load_string($xml);

        return $this->writeXml($xmlDoc);
    }

    public function writeXml($content){

        $fileName = time().".xml";
        //$content->saveXML($fileName);
        Storage::put($fileName, $content);
        Storage::move($fileName, 'storage/'.$fileName);

        return $this->sendFilToNCS($fileName);           

    }

    private function sendFilToNCS($fileName)
    {
        $content = Storage::disk('local')->url($fileName);
        $ftp_server = "ftp.host.dk";
        $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
        $login = ftp_login($ftp_conn, "username", "xXxxXX");

        // upload file
        if (ftp_put($ftp_conn, $fileName, $content, FTP_ASCII))
          {
          // close connection
          ftp_close($ftp_conn);

          return true;
        }
        // close connection
        ftp_close($ftp_conn);
        return false;

    }
}

1 Ответ

1 голос
/ 18 марта 2020

Фасад хранилища без каких-либо изменений поместит ваши файлы в storage/app. Я не вижу смысла в перемещении файлов впоследствии. Воображение вы бы поместили ваши файлы в storage/app/xml для облегчения обзора. Это можно получить следующим образом.

$fileName = '/xml/' . $fileName;
Storage::put($fileName, $content);

Когда вы хотите получить путь к файлу, у фасада хранилища есть помощник для этого. Который вернет абсолютный путь, который вам понадобится для ftp_put().

$path = Storage::path($fileName)

Похоже, вы используете ftp_put() неправильно. Третий параметр - это путь к файлу, используйте только что определенное свойство $path.

ftp_put($ftp_conn, $fileName, $path, FTP_ASCII)

В этом коде много аспектов, но это кажется наиболее очевидной ошибкой, я Не уверен, что это поможет вам пройти весь путь, но должно привести вас к следующему этапу процесса.

...