下载文件并使用PHP和AJAX上传

时间:2011-11-20 08:59:22

标签: php ajax jquery ftp download

我正在开发一个使用JQuery AJAX和PHP将一些数据上传到我的数据库的Web应用程序。

要提交的表单的一个字段是图像的URL(WEB的任何地址)。该图像应下载到我的FTP服务器,然后将其新的地址插入到数据库中。

如何从任何网址下载图片并将其上传到我的FTP服务器?

形式:

<form id="form-id" method="post" action="insert.php" charset=utf-8">
    <input type="text" name="title" id="title">
    <input type="text" name="image-url" id="image-url">
    <input type="submit" name="submit" id="submit">
</form>

的JavaScript

$("#submit").live("click", function(event){
    event.preventDefault();
    $.ajax({
        type : "POST",
        url : "insert.php",
        data : {
          'title': valueTitle,
          'image': valueImage
        },
        cache : false,
        success : function(html) {
        if (html == "success") {
            //...
        } else if (html == "ftp-error") {
            //...
        } else if (html == "sql-error") {
            //...
        }           
    }
    });     
});

insert.php

$title = $_REQUEST['title'];
$image = $_REQUEST['image'];

$imageInMyServer = downloadImageFromURLAndUploadFTP($image);
function downloadImageFromURLAndUploadFTP($image) {
    //that is what I want to know how to do.
}

//sql query with $title and $imageInMyServer

备注:

  • 我要下载的文件不在我的服务器上。它是互联网上的其他地方,我需要将其下载到我的FTP服务器
  • 否。我无法在SQL查询中使用第一个外部URL

2 个答案:

答案 0 :(得分:1)

以下是how to do FTP transfers in PHP的一个很好的例子。至于下载文件,如果您使用的是wget,则可以使用exec()

exec('wget -q ' . $url . ' -0 /path/to/newfile');

从我给你的链接窃取代码片段,这是你的功能可能是这样的:

function downloadImageFromURLAndUploadFTP($image) {
    // in your case it would be some img extension like .jpg, .gif, or .png
    // you can check the extension of $image and use that if you want.
    $newFile = '/path/to/newfile.ext';
    exec('wget -q ' . $image . ' -0 ' . $newFile);

    if (file_exists($newFile)) {
        // set up connection and login
        $connect = ftp_connect($ftpServer); 
        $login   = ftp_login($connect, $ftpUser, $ftpPass); 

        // check connection
        if (!$connect || !$login) { 
            die('FTP connection has failed!'); 
        } else {
            echo "Connected to {$ftpServer}, for user {$ftpUser}";
        }

        // upload the file
        $fileNameOnFTPServer = 'whateverYouWantToNameIt.ext'; // arbitrary extension
        $upload = ftp_put($connect, $fileNameOnFTPServer, $newFile, FTP_BINARY); 

        // check upload status
        if (!$upload) { 
            echo "FTP upload has failed!";
        } else {
            echo "Uploaded {$image} to {$ftpServer} as {$fileNameOnFTPServer}";
        }

        ftp_close($connect);
    }
}

注意:有时file_exists()的行为与开始 /时的行为方式不同。例如/path/to/file可能存在,但file_exists()会认为它不会删除开头&#34; /&#34;。解决这个问题的一种方法是检查它:

file_exists(substr($newFile, 1))
祝你好运!

答案 1 :(得分:0)

如果你没有exec权限,另一种解决方案是使用curl来抓取图像,或者你可以使用file_get_contents(),有很多方法,只是个人偏好。

我把你的剧本看起来像是什么样的,我相信你可以改进它。

<强> insert.php

<?php
if(isset($_POST['image']) && isset($_POST['title'])){
    if(substr($_POST['image'],0,4)=='http'){
        $image = curlgetimage($_POST['image']);
        $info = pathinfo($_POST['image']);
        if(isset($info['extension']) && ($info['extension']=='gif' || $info['extension']=='png' || $info['extension']=='jpg')){
            $path='./temp/'.md5($_POST['image']).'.'.$info['extension'];
            file_put_contents($path,$image);
            if(ftp_put_image($path)===true){
                //Do your database stuff, remember to escape..
                unlink($path);
                echo 'Success';
            }else{
                echo 'ftp-fail';
            }
        }else{
            echo'File type not allowed';
        }
    }else{
        echo'Must start with http://';
    }
}else{
    header('Location: http://www.example.com/');
}


function ftp_put_image($file){
    if(!file_exists($file)){return false;}
    $fp = fopen($file, 'r');
    $conn_id = ftp_connect('ftp.yourhost.com'); //change
    $login_result = ftp_login($conn_id,'username','password'); //change
    $return=(ftp_fput($conn_id, $file, $fp, FTP_BINARY))?true:false;
    ftp_close($conn_id);
    fclose($fp);
    return $return;
}

function curlgetimage($url) {
    $header[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg';
    $header[] = 'Connection: Keep-Alive';
    $header[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8';
    $curl = curl_init($url);
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_USERAGENT, 'YourSpiderBot/0.01 (Bla Bla Robot; http://www.example.com; spider@example.com)'); //change
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    curl_setopt($curl, CURLOPT_REFERER, $url);
    curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate');
    curl_setopt($curl, CURLOPT_AUTOREFERER, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 60);
    $return = curl_exec($curl);
    curl_close($curl);
    return $return;
}
?>