我对Laravel的文件系统不满意。我正在尝试在控制器中生成,保存和传输xml文件。
除了FTP传输外,其他所有功能都可以。我怀疑这是因为我无法在sendFilToNCS($ fileName)函数中获取新xml文件的正确路径。我收到此错误:
ErrorException ftp_put(/storage/1584533245.xml):打开失败流:无此文件或目录
希望从Laravel专家那里获得Som的帮助。美好的一天。
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;
}
}
没有任何更改的Storage Facade将把您的文件放在storage/app
中。我看不出后来移动文件的意义。想像一下,可以将文件放在storage/app/xml
中,以方便查看。可以这样获得。
$fileName = '/xml/' . $fileName;
Storage::put($fileName, $content);
[当您要获取文件路径时,Storage Facade会为此提供帮助。这将返回绝对路径,您需要ftp_put()
。
$path = Storage::path($fileName)
似乎您使用的是ftp_put()
错误。第三个参数是文件的路径,请使用新定义的$path
属性。
ftp_put($ftp_conn, $fileName, $path, FTP_ASCII)
此代码中有很多方面,但这似乎是最明显的错误,我不确定它会完全帮助您,但应该使您进入过程的下一步。