PHP FTP上传BLOB TEMP图像

时间:2016-04-06 16:21:08

标签: javascript php ftp blob temporary-files

我正在尝试通过FTP上传表单图像。 但是因为我使用Javascript验证我的表单,我无法提供PHP文件对象。 相反,我传递图像的临时blob路径。 当我尝试上传时,它无法正常工作。 如果我接受blob路径并将其手动放在brwoser行中,它会显示图像,这意味着我的blob路径没有损坏。 PHP / FTP不能将blob临时图像作为源文件吗? 这是我的代码:

Javascript和HTML



$(document).ready(function() {
	$('#testImageSelect').change( function(event) {
		var validation = false;
		var message = "";
		validation = validateImage();
		if(validation){
			message = "Javascript: Das Bild ist ok!";
			$("#submitTest").attr("disabled",false);
		}else{
			message = "Javascript: Das Bild entspricht nicht den Anforderungen!";
			$("#submitTest").attr("disabled",true);
		}
		document.getElementById("scriptresultJs").innerHTML = "<p>"+message+"</p>";
	});
	
	$("#submitTest").click(function () {
		var message = "";
		var dataSubmit = [];
		var pic = document.getElementById("testImageSelect").files[0];
		var pic_path = URL.createObjectURL(pic);
		var picture = [];
		picture = {
			tmp_path: pic_path,
			name: pic.name,
			size: pic.size
		}
		dataSubmit = {
			castingcity: "Coruscant",
			forename: "Anakin",
			lastname: "Skywalker",
			geschlecht: "Männlich"
		};
		var result = "default";
		result = $.ajax({
		    type: 'POST',
		    async: false,   // WICHTIG! 
		    url: 'http://hiddentalents.de/php/test.php',
		    data: ({
		    	data: dataSubmit,
		    	picture: picture
	        })
		}).responseText;
		message = result;
		document.getElementById("scriptresultPHP").innerHTML = "<p>"+message+"</p>";
	});
});

function validateImage() {
	var validation = false;
	var pic = $("#testImageSelect").val().split('/').pop().split('\\').pop();
	var ext = pic.substring(pic.lastIndexOf('.') + 1);
	if(ext == "JPEG" || ext == "jpeg" || ext == "jpg" || ext == "JPG"){
		validation = true;
	} 
	else{
		validation = false;
	}
	return validation;
}
&#13;
<!DOCTYPE HTML>
<html>

	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
		<link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="screen">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
		<title>Servertesting</title>
	</head>
	
	<body>
		<form role="form" method="post" action="" id="testForm" enctype="multipart/form-data">
			<input type="file" id="testImageSelect" name="testImageSelect" required>
		</form>
		<button class="btn btn-default" id="submitTest" disabled>Abschicken</button>
		<div id="scriptresultJs"></div>
		<p id="scriptresultPHP"></p>
	</body>

</html>
&#13;
&#13;
&#13;

PHP

<?php
$db_host = "rdbms.strato.de";
$db_datenbank = "(name of database)"; 
$db_username = "(username)"; 
$db_password = "(password)";

$output = "";

SESSION_START();

# Datenbankverbindung herstellen 
$datenbank = new mysqli($db_host, $db_username, $db_password, $db_datenbank);

# Hat die Verbindung geklappt ? 
if ($datenbank->connect_errno) {
    $output = $output . "\n" . "Fehler beim Verbinden mit der Datenbank: (" . $datenbank->connect_errno . ") " . $datenbank->connect_error;
}
//UTF 8 einstellen
mysqli_query($datenbank, "SET NAMES 'utf8'");

# Wurde überhaupt was eingetragen?
if(isset($_POST["data"])) {
    //Image überprüfung:
    $output = $output . "\n". $_POST["picture"]["tmp_path"];
    $target_dir = "temp/";
    $target_file_path = $target_dir . date('dmYHis_') . $_POST["picture"]["name"];
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file_path,PATHINFO_EXTENSION);

    // Check if file already exists
    if (file_exists($target_file_path)) {
        $output = $output . "\n" . "Es tut uns leid, das gewählte Bild existiert bereits.";
        $uploadOk = 0;
    }
    // Check file size
    if ($_POST["picture"]["size"] > 1500000) {
        $output = $output . "\n" . "Die Bilddatei ist leider zu groß.";
        $uploadOk = 0;
    }
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "jpeg" && $imageFileType != "JPG" && $imageFileType != "JPEG" ) {
        $output = $output . "\n" . "Leider sind nur JPG bzw. JPEG Dateien erlaubt. Sie haben eine " . $imageFileType . " Datei hochgeladen!";
        $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        $output = "Die Datei konnte leider nicht hochgeladen werden. Folgende Fehler sind verantwortlich:\n".$output;
    // if everything is ok, try to upload file
    } else {
        //Upload Image
        $ftp_server = "ftp.strato.de";
        $ftp_user_name = "(username)";
        $ftp_user_pass = "(password)";
        $destination_file = $target_file_path;
        $source_file = $_POST['picture']["temp_path"];

        // Verbindung aufbauen
        $conn_id = ftp_connect($ftp_server);

        // Login mit Benutzername und Passwort
        $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

        // Verbindung überprüfen
        if ((!$conn_id) || (!$login_result)) {
            $output = $output . "\n" . "FTP-Verbindung ist fehlgeschlagen!";
            $output = $output . "\n" . "Verbindungsaufbau zu $ftp_server mit Benutzername $ftp_user_name versucht.";
            exit;
        } else {
            $output = $output . "\n" . "Verbunden zu $ftp_server mit Benutzername $ftp_user_name";
        }

        // Datei hochladen
        $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);

        // Upload überprüfen
        if (!$upload) {
            $output = $output . "\n" . "FTP-Upload ist fehlgeschlagen!\nDie Datei $source_file konnte nicht auf dem Server $ftp_server als $destination_file hochgeladen werden!";
        } else {
            $output = $output . "\n" . "Datei $source_file auf Server $ftp_server als $destination_file hochgeladen";
        }

        // Verbindung schließen
        ftp_close($conn_id);

        //Datenbankeinträge machen:
        $castingcity = mysqli_real_escape_string($datenbank,$_POST["data"]["castingcity"]);
        $forename = mysqli_real_escape_string($datenbank,$_POST["data"]["forename"]);
        $lastname = mysqli_real_escape_string($datenbank,$_POST["data"]["lastname"]);
        $geschlecht = mysqli_real_escape_string($datenbank,$_POST["data"]["geschlecht"]);
        $picture = $target_file_path;
        //Insert Data (except Image)
        $sql = "INSERT INTO candidates_temp (castingcity, forename, lastname, geschlecht, picture)
        VALUES ('$castingcity', '$forename', '$lastname', '$geschlecht', '$picture')";
        if ($datenbank->query($sql) === TRUE) {
            $output = $output . "\n" . "Datenbank Werte eingetragen!";
        } else {
            $output = $output . "\n" . "Error: " . $sql . "<br>" . $datenbank->error;
        }
    }
}else {
    $output = $output . "\n" . "POST Variable leer!";
}

$datenbank->close();

echo $output;

&GT;

1 个答案:

答案 0 :(得分:1)

终于解决了

如果发现这个Tutorial,那就行了!!!