Dateiupload durch Input Field

code-schreiber

Grünschnabel
Sehr geehrte Herren,

ich würde gerne einen Datei-Upload machen und zwar ohne Durchsuchen-Feld, mit dem man die Datei lokal auf der Festplatte auswählen würde, sondern durch z.B. ein Text Input Field, wo man die URL oder Adresse des Bildes eingibt, und dass dieses dann dort in das gewünschte Verzeichnis auf dem Server hochgeladen wird.

Wie müsste ich dazu das Formular gestalten und mit welchem Befehl kann ich dann auf die datei per PHP zugreifen? (move_uploaded_file ?)

Vielen Dank für Ihre Hilfe!

Mit freundlichen Grüssen,

code-schreiber -


PS: Den folgenden Code bräuchte ich dann ja natürlich nicht mehr oder?

PHP:
<FORM name=upl ENCTYPE="multipart/form-data" ACTION="upload.php" METHOD=POST>
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
<input type="File" name="userfile" size="40" maxlength="255">
 
Zuletzt bearbeitet:
Hier ne möglichkeit wie du es machen kannst! :)

PHP:
<h1>Upload</h1>

<form
  action="<?php echo $_SERVER['PHP_SELF']; ?>"
  method="post"
  enctype="multipart/form-data">
<input type="file" name="probe" />
<input type="submit" value="Los!" />
</form>
<hr />
<?php
  if (isset($_FILES['probe']) and ! $_FILES['probe']['error']) {
    // Alternativ:            and   $_FILES['probe']['size']
    move_uploaded_file($_FILES['probe']['tmp_name'], $_FILES['probe']['name']);
    printf("Die Datei %s steht jetzt als %s zur Verfügung.<br />\n",$_FILES['probe']['name'],$_FILES['probe']['name']);
    printf("Sie ist %u Bytes groß und vom Typ %s.<br />\n",$_FILES['probe']['size'], $_FILES['probe']['type']);
  }
 ?>
Das kann man auch Multiple einbauen für mehrere Uploads gleichzeitig!
das ist diese Variante!
je mehr Upload felder du erstellst umso mehr uploads macht er!
PHP:
<h1>Upload</h1>

<form  action="<?php echo $_SERVER['PHP_SELF']; ?>"  method="post"  enctype="multipart/form-data">
<input type="file" name="probe[]" /><br>
<input type="file" name="probe[]" /><br>
<input type="file" name="probe[]" /><br>
<input type="file" name="probe[]" /><br>
<input type="file" name="probe[]" /><br>
<input type="file" name="probe[]" /><br>
<input type="submit" value="Los!" /><br>
</form>
<hr />
<?
		for($i=0;$i<count($_FILES['probe']['name']);$i++){
			if ($_FILES['probe']['name'][$i] != "") {
				move_uploaded_file($_FILES['probe']['tmp_name'][$i], $_FILES['probe']['name'][$i]);
				printf("Die Datei %s steht jetzt als %s zur Verfügung.<br />\n",$_FILES['probe']['name'][$i],$_FILES['probe']['name'][$i]);
				printf("Sie ist %u Bytes groß und vom Typ %s.<br /><br>\n",$_FILES['probe']['size'][$i], $_FILES['probe']['type'][$i]);
			}
		}
 ?>

Angemerkt sei aber das er in beiden Versionen die Files falls sie exestieren überschreibt!
 
Zuletzt bearbeitet:
hmm
Sorry
beim zweiten mal lesen ist mir aufgefallen das du das was ich gemacht habe ja garnicht willst *G*.
also
das mit dem Durchsuchen muss sein da das Feld vom typ 'File' sein muss!
das einzige was du machen kannst ist ihm zu sagen wo er es abspeichern kann!
das ist aber auch das einzige was du kannst!
Bei diesem <input type="file" name="probe[]" />
stecken mehr daten drinnen als du siehst wie z.b.
name,grösse,typ usw...

Hmm
Wobei wenn ichs mir recht überlege gäbe es schon eine Möglichkeit
ich werd das mal testen! :)
 
Zuletzt bearbeitet:
Gut ok
ist bischen heftig aber das dürfte dich zufrieden stellen! :)
PHP:
<?
$fileUploadDir = "c:/upload"; // NO SLASH ( / ) AT THE END OF THE PATH!

if(isset($formPathToFile) && isset($formFileName)){
	$formFile = $formPathToFile."/".$formFileName;
	$realFile = getFile($formFile);
	if(!saveFile($realFile,$fileUploadDir,$formFileName)){
		$error = "<b>FILE TRANSFER FAILED!<br>$formFileName not transfered</b>";
	}
	echo "upload Succes!";
}
function saveFile($file,$dest,$fileName){
	$fileHandle = fopen($dest."/".$fileName,'wb');
	fwrite($fileHandle,$file,1048576*2);
	@fclose($fileHandle);
	return true;
}

function getFile($file){
	$fileHandle = @fopen($file,'rb');
	$file = @fread($fileHandle,1048576*2);
	@fclose($fileHandle);
	return $file;
}
?>
<html>
<head>
<script type="text/javascript">
function checkSlash(){
	docForm1 = document.forms[0].formPathToFile;
	if(docForm1.value.charAt(docForm1.value.length-1) == '/'){
		alert('Bitte keine Slashes am Ende des Pfades!');
		docForm1.value = docForm1.value.substring(0, docForm1.value.length- 1);
		return false;
	}

	docForm2 = document.forms[0].formFileName;
	if(docForm2.value == ''){
		alert('Dateiname fehlt!');
		docForm2.focus();
		return false;
	}
	return true;
}
</script>
</head>
<body>
<h1>Upload</h1>
<form  action="<?php echo $_SERVER['PHP_SELF']; ?>"  method="post" onSubmit="return	checkSlash()">
<?=$error?>
<table>
	<tr>
		<td>Pfad zur Datei</td>
		<td>Dateiname</td>
	</tr>
	<tr>
		<td><input type="text" name="formPathToFile"></td>
		<td><input type="text" name="formFileName"></td>
	</tr>
	<tr>
		<td colspan="2"><input type="submit" value="Los!"></td>
	</tr>
</table>
</form>
</body>
</html>
 
Zuletzt bearbeitet:
Sehr geehrter Herr SonicBe@m,

wirklich hervorragend was Sie hier als Code gepostet haben! Ich hatte erst gestern Abend Zeit ein wenig selber daran rumzucodieren und bin auch auf die fopen, fwrite und fclose Befehle gestossen, hatte jedoch am Schluss noch eine Fehlermeldung.

Ich hatte dann probiert eine Datei aus dem Internet hochzuladen per Pfadeingabe in mein Input-Textfeld, doch auf dem Server legte es die xyz.gif Datei dann schon an, aber mit dem falschen Inhalt, nämlich:

"Resource id #11"

Erst jetzt, wenn ich mir Ihren 10 mal besser als meinen Code geschriebenen Code anschaue merke ich, dass ich den "b" (binary) parameter bei mir nur fürs öffnen des Files, also beim fopen benutzt hatte, jedoch nicht beim schreiben, und dass es eventuell daran hätte liegen können.

Ich werde heute Abend in diesem Fall Ihren Code mal ausprobieren und danke Ihnen hier schonmal sehr für Ihre Hilfe.

Vielen Dank!
 
*g*
Ich finde es zwar sehr Lobend das Sie mich Sie ansprechen aber das muss nicht sein :)
Ich für meinen teil sehe das Internet als einen sehr grossen Treffpunkt für Freunde also können Sie mich auch ruhig duzen :)

Wenn es noch Probleme gibt dann meld dich einfach! :)
 
Zurück