PHP:将文件上传到远程服务器

在项目开发的过程中,可能会牵扯到大量的图片,PDF,ZIP等文件。这些文件不会放在本地或者本项目下。他们会有一个专门的图片服务器。如果你够细心的话你会发现,你从百度上下载下来的图片的网址都会有http://img.qkhl.net 注意这个就是一个图片服务器。实现文件上传到远程服务器,我用的是plupload来实现的。http://www.cnblogs.com/2050/p/3913184.html 插件可以在官网上download
用 plupload上传的思路是:在本地选择文件上传,在远程服务器那边接收,并且返回图片地址,在保存到数据库中即可。在上传的过程中要注意的是路径要保证正确。
plupload功能比较强大,不仅可以实现远程上传,也可以实现本地上传。
*html代码:

位置:教辅图书列表
2、上传图书
1
添加图书信息
2
上传图书
3
设置图书价格
上传PDF:
上传PDF:

*服务器那边的接收文件:

header('Access-Control-Allow-Origin:*'); //html5跨域接收文件
date_default_timezone_set('PRC');
@set_time_limit(5 * 60);
 * 接收参数
$file_path = isset($_POST['file_path']) ? $_POST['file_path'] : '';   //文件路径新建的文件夹
$callback_url = isset($_POST['file_path']) ? $_POST['callback_url'] : '';  //回调地址
$host_url = "task_cloud.qkhl.net";       //回调域名
$url = $host_url . $callback_url . '?1=1';
//循环POST参数
foreach ($_POST as $k => $v) {
    if ($k != 'file_path' && $k != 'callback_url') {
        $url .= '&' . $k . '=' . $v;
    }
}

if (!$file_path) {
    die('{"status" : "success", "result" : {"code": 201, "message": "data is null"}}');
}

//sleep(1); //为了显示进度条

$targetDir = $file_path;

$cleanupTargetDir = true;

$maxFileAge = 5 * 3600;

if (!file_exists($targetDir)) {
    @mkdir($targetDir);
}
if (isset($_REQUEST["name"])) {
    $fileName = $_REQUEST["name"];
} elseif (!empty($_FILES)) {
    $fileName = $_FILES["file"]["name"];
} else {
    $fileName = uniqid("file_");
}

$filePath = $targetDir . '/' . $fileName;
$ys_filePath = $targetDir . '/ys_' . $fileName;

$chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0;
$chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0;

if ($cleanupTargetDir) {
    if (!is_dir($targetDir) || !$dir = opendir($targetDir)) {
        die('{"status" : "error", "result" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
    }

    while (($file = readdir($dir)) !== false) {
        $tmpfilePath = $targetDir . '/' . $file;
        if ($tmpfilePath == "{$filePath}.part") {
            continue;
        }

        if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) {
            @unlink($tmpfilePath);
        }
    }
    closedir($dir);
}


if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb")) {
    die('{"status" : "error", "result" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}

if (!empty($_FILES)) {
    if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
        die('{"status" : "error", "result" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
    }

    if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) {
        die('{"status" : "error", "result" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
    }
} else {
    if (!$in = @fopen("php://input", "rb")) {
        die('{"status" : "error", "result" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
    }
}

while ($buff = fread($in, 4096)) {
    fwrite($out, $buff);
}

@fclose($out);
@fclose($in);

if (!$chunks || $chunk == $chunks - 1) {
    rename("{$filePath}.part", $filePath);

    die('{"status" : "success", "result": {"imgpath" : "' . $filePath . '"}}');
}

你可能感兴趣的:(PHP:将文件上传到远程服务器)