【发布时间】:2021-07-05 13:18:52
【问题描述】:
我有一个小问题,这将是一个很大的帮助。
我在 laravel 中有一个函数可以捕获某些数据,最后以 $ file-> move ($ virtual_machine_address, document) 保存在创建的文件夹中。这在当地创造了奇迹。代码引用自subir archivos en laravel (API)
public function uploadFile(Request $request){
/*Initializing variables in input*/
$input = $request->all();
/*rutas de carpeta*/
$ruta_server = DIRECTORY_SEPARATOR.DIRECTORY_SEPARATOR.'172.xx.xx.xxx'.DIRECTORY_SEPARATOR.'Prueba'.DIRECTORY_SEPARATOR.'DOCUMENTOS'.DIRECTORY_SEPARATOR;
/*Enter if file exist*/
if($request->hasFile('file')){
/*Modification in the name and extension*/
$file = $request->file('file');
$filename = $file->getclientOriginalName();
$filename = pathinfo($filename, PATHINFO_FILENAME);
$name_file = str_replace(" ", "_", $filename);
$extension = $file->getClientOriginalExtension();
/*Redacción o revisión*/
if($input['posicion'] == 1){
$picture = 'Redaccion('.$input['version'].')' . '-' . $name_file . '.' . $extension;
}else{
$picture = 'Revision('.$input['version'].')' . '-' . $name_file . '.' . $extension;
}
/*official root*/
$ruta_oficial = $ruta_server.$input['id_carpeta'].DIRECTORY_SEPARATOR;
/*create and uploadfile*/
$file->move($ruta_oficial, $picture);
return response()->json([
"ok" => true,
"error" => false,
"data" => $picture
]);
}else{
return response()->json([
"ok" => false,
"error" => true,
"mensaje" => "Error Detectado"
]);
}
}
我在 docker 中创建了一个容器,它模拟将上传项目的 apache 服务器配置,并且在使用 postman 测试我的功能时,它不起作用。发送错误:
Symfony\Component\HttpFoundation\File\Exception\FileException: Unable to create the "//172.xx.xx.xxx/Prueba/DOCUMENTOS/100-2021/" directory. in file /opt/data/vendor/symfony/http-foundation/File/File.php on line 125
还有 38 # 个错误。
我的项目版本: Laravel:8.48.0 PHP: 8.0.7 Docker 容器:FROM php:8.0.7-apache (Linux) 文件服务器(172.xx.xx.xxx):Windows 虚拟服务器
【问题讨论】:
-
172.xx.xx.xxx是那个不起作用的那个正确的 ip 吗? -
你能从docker容器中访问到指定的IP吗?您是否检查过文档 (docs.docker.com/config/containers/container-networking) 中的主题容器网络?
-
@RiggsFolly 那是我有空间保存我的项目文件的虚拟机的 IP。我使用该 IP 在本地进行了测试,它确实保存了我的文档。当我在 docker 映像上进行测试时,这就是失败的地方。我在 ip 中输入了“x”
-
嗯,它不会是另一台机器上的 ip 是它
-
来自文档:默认情况下,当您使用 docker create 或 docker run 创建或运行容器时,它不会向外界发布任何端口。要使端口可用于 Docker 外部的服务或未连接到容器网络的 Docker 容器,请使用 --publish 或 -p 标志。这将创建一个防火墙规则,该规则将容器端口映射到 Docker 主机上与外部世界的端口。
标签: laravel windows api apache smb