【问题标题】:Upload/Put file Directly in FTP server while user will upload in webpage form上传/放置文件直接在FTP服务器中,而用户将以网页形式上传
【发布时间】:2015-08-12 10:21:57
【问题描述】:

我想知道用户是否有可能在网页表单控件中上传任何(JPG、JPEG、PDF、Zip 等)文件,这些文件将直接上传/放在 FTP 服务器上而不存储先临时在网站服务器,然后在FTP服务器中传输?

实际上我有一个商业案例,用户可以上传超过 200 MB 的文件,所以在这里我想直接将其传输到远程 FTP 服务器而不将其存储在网站服务器中。

我进一步调查了 html 表单标签允许 FTP 协议 in Action 属性,下面是我尝试过的代码片段。

<form action="ftp://username:password@domainname/upload.php" enctype="multipart/form-data" method="post">
    <table style="border-collapse: collapse;" border="1" width="500px">
        <tbody><tr>
            <td> Upload File :</td>
            <td> <input name="uploadedfile" type="file"> </td>
        </tr>
        <tr>
            <td colspan="2">
             <input name="Save File" value="Save File on Server" type="submit">
            </td>
        </tr>     
    </tbody></table>
</form>

但是当我尝试上传图像并提交它时,它会将我重定向到浏览器中的ftp://username:password@domainname/upload.php url,这将显示我在 upload.php 文件中编写的 PHP 代码。

实际上,我已经知道一旦表单提交并将文件从服务器临时位置 ($_FILES['uploadedfile']['tmp_name']) 传输到 FTP 服务器,如何在远程 FTP 服务器中传输文件,但是这样做方法是先将文件上传到网站服务器,然后再进一步传输到远程 FTP 服务器,这将需要双倍的时间。

您也可以向我推荐其他方式来满足我的业务需求。

提前致谢。

【问题讨论】:

    标签: php jquery html forms ftp


    【解决方案1】:

    您可以使用 ftp_put()。 http://php.net/manual/en/function.ftp-put.php

    您的 .php 文件的开头可能如下所示:

    <?PHP
       $myFile = $_FILES['file_name']; // This will make an array out of the file information that was stored.
    ?>
    

    现在说到传输该信息...

    <?PHP
            $destination_path = "src/bin/"; 
    

    //你想把文件放到网络服务器上的位置(相对于你的登录目录)

    $destination_file = $destination_path."img.jpg";
    

    //这将创建一个包含文件的完整路径供您使用,例如像这样拆分变量以防我需要单独使用或动态创建新文件夹。

    $file = $myFile['tmp_name'];
    

    //将数组转换为包含文件所在服务器上的路径名的新字符串。

        $upload = ftp_put($conn_id, $destination_file, $file, FTP_BINARY);// upload the file
        if (!$upload) {// check upload status
            echo "FTP upload of $destination_file has failed!";
        } else {
            echo "Uploaded $file to $conn_id as $destination_file";
        }
    ?>
    

    【讨论】:

    • 感谢您的反馈。但实际上我想传输文件而不存储在网站服务器中。在您提到的代码中,首先用户上传的文件存储在服务器的 /tmp 位置下的服务器中,然后进一步传输到远程 FTP
    • 您可以使用 PHP PUT 方法。 PHP 为某些客户端用来在服务器上存储文件的 HTTP PUT 方法提供支持。 php.net/manual/en/features.file-upload.put-method.php
    • 您好 Santosh,感谢您的回复,因为您的回复为我提供了满足我需求的替代方法。但是在这里我不确定如何使用 HTTP put 方法意味着假设在我的表单中有很多控件以及文件控件,那么如何仅从所有表单元素中获取文件控件?
    • @SantoshJagtap 从问题的角度来看,POSTPUT 没有区别。在这两种情况下,文件都会首先上传到 Web 服务器。并且实现PUTPOST 更困难(HTML 原生支持)。
    猜你喜欢
    • 2012-10-04
    • 2015-11-04
    • 2018-07-05
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多