【问题标题】:Upload a file to a virtual machine on apache server将文件上传到 apache 服务器上的虚拟机
【发布时间】: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


【解决方案1】:

这是我的 DockerFile

FROM php:8.0.7-apache

RUN apt-get update

# 1. paauetes dev
RUN apt-get install -y \
    git \
    zip \
    samba \
    smbclient \
    curl \
    sudo \
    unzip \
    libpq-dev \
    libzip-dev \
    libicu-dev \
    libbz2-dev \
    libpng-dev \
    libjpeg-dev \
    libmcrypt-dev \
    libreadline-dev \
    libfreetype6-dev \
    libsmbclient-dev \
    g++ \
    libaio1 wget && apt-get clean autoclean && apt-get autoremove --yes &&  rm -rf /var/lib/{apt,dpkg,cache,log}/ 



# 2. dir apache
ENV APACHE_HOME /var/www/html


# 3. mod_rewrite for URL rewrite and mod_headers for .htaccess extra headers like Access-Control-Allow-Origin-
RUN a2enmod rewrite headers

# 4. start with base php config, then add extensions
#RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

RUN docker-php-ext-install \
    gd\
    bz2 \
    intl \
    iconv \
    bcmath \
    opcache \
    calendar \
#    mbstring \
#    pdo_mysql \
    zip 
    

# 5. composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
 

# ORACLE oci 
RUN mkdir /opt/oracle \
    && cd /opt/oracle     
    
ADD http://git.xxx.xxx/bxxxx.xxxx/media/raw/master/IC/instantclient-basic-linux.x64-19.5.0.0.0dbru.zip /opt/oracle
ADD http://git.xxx.xxx/bxxxx.xxxx/media/raw/master/IC/instantclient-sdk-linux.x64-19.5.0.0.0dbru.zip /opt/oracle

# Install Oracle Instantclient
RUN  unzip /opt/oracle/instantclient-basic-linux.x64-19.5.0.0.0dbru.zip -d /opt/oracle \
    && unzip /opt/oracle/instantclient-sdk-linux.x64-19.5.0.0.0dbru.zip -d /opt/oracle \
  #  && ln -s /opt/oracle/instantclient_19_5/libclntsh.so.19.1 /opt/oracle/instantclient_19_5/libclntsh.so \
    && ln -s /opt/oracle/instantclient_19_5/libclntshcore.so.19.1 /opt/oracle/instantclient_19_5/libclntshcore.so \
  #  && ln -s /opt/oracle/instantclient_19_5/libocci.so.19.1 /opt/oracle/instantclient_19_5/libocci.so \
    && rm -rf /opt/oracle/*.zip
    
ENV LD_LIBRARY_PATH  /opt/oracle/instantclient_19_5:${LD_LIBRARY_PATH}
    
# Install Oracle extensions
RUN echo 'instantclient,/opt/oracle/instantclient_19_5/' | pecl install oci8-3.0.1 \ 
      && docker-php-ext-enable \
               oci8 \ 
       && docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/opt/oracle/instantclient_19_5,19.5 \
       && docker-php-ext-install \
               pdo_oci 

RUN mkdir -p /opt/data/public && \
    rm -r /var/www/html && \
    ln -s /opt/data/public $APACHE_HOME


    
WORKDIR $APACHE_HOME

【讨论】:

    猜你喜欢
    • 2013-08-02
    • 2014-07-25
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2016-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多