ďťż
Podstrony
|
telcocafeWitamChciałbym umieścić na swojej stronce coś typu: podaję ścieżkę do pliku, klikam button upload i wysyła mi plik na ftp yoyo.pl. Znalazłem w sieci coś takiego, tylko nie umiem tego przerobić odpowiednio, zakładając że kod jest dobry. index.html<html> <body> <script> var url = "post.php"; var binary; var filename; var mytext; function upload() { filename = document.getElementById('myfile').value; mytext = document.getElementById('mytext').value; document.getElementById('ajaxbutton').disabled = true; // request local file read permission try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } // open the local file var file = Components.classes["@mozilla.org/file/local;1"] .createInstance(Components.interfaces.nsILocalFile); file.initWithPath( filename ); stream = Components.classes["@mozilla.org/network/file-input-stream;1"] .createInstance(Components.interfaces.nsIFileInputStream); stream.init(file, 0x01, 00004, null); var bstream = Components.classes["@mozilla.org/network/buffered-input-stream;1"] .getService(); bstream.QueryInterface(Components.interfaces.nsIBufferedInputStream); bstream.init(stream, 1000); bstream.QueryInterface(Components.interfaces.nsIInputStream); binary = Components.classes["@mozilla.org/binaryinputstream;1"] .createInstance(Components.interfaces.nsIBinaryInputStream); binary.setInputStream (stream); // start AJAX file upload in 1 second window.setTimeout("ajax_upload()", 1000); } function ajax_upload() { // request more permissions try { netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); } catch (e) { alert("Permission to read file was denied."); } http_request = false; http_request = new XMLHttpRequest(); if (!http_request) { alert('Cannot create XMLHTTP instance'); return false; } // prepare the MIME POST data var boundaryString = 'capitano'; var boundary = '--' + boundaryString; var requestbody = boundary + '\n' + 'Content-Disposition: form-data; name="mytext"' + '\n' + '\n' + mytext + '\n' + '\n' + boundary + '\n' + 'Content-Disposition: form-data; name="myfile"; filename="' + filename + '"' + '\n' + 'Content-Type: application/octet-stream' + '\n' + '\n' + escape(binary.readBytes(binary.available())) + '\n' + boundary; document.getElementById('sizespan').innerHTML = "requestbody.length=" + requestbody.length; // do the AJAX request http_request.onreadystatechange = requestdone; http_request.open('POST', url, true); http_request.setRequestHeader("Content-type", "multipart/form-data; \ boundary=\"" + boundaryString + "\""); http_request.setRequestHeader("Connection", "close"); http_request.setRequestHeader("Content-length", requestbody.length); http_request.send(requestbody); } function requestdone() { if (http_request.readyState == 4) { if (http_request.status == 200) { result = http_request.responseText; document.getElementById('myspan').innerHTML = result; } else { alert('There was a problem with the request.'); } document.getElementById('ajaxbutton').disabled = false; } } </script> <form> Text: <input type="text" id="mytext" name="mytext" size="40"> <br> File: <input type="file" id="myfile" name="datafile" size="40"><br> <input type="button" id="ajaxbutton" value="AJAX IT" onclick="upload();"> </form> <div id="sizespan"></div> <hr> <div id="myspan"></div> </body> </html> post.php<? print_r($_FILES); ?> <hr> <? print_r($_POST); $fpath = "/tmp/"; // move (actually just rename) the temporary file to the real name move_uploaded_file ( $_FILES{myfile}{tmp_name}, $fpath.$_FILES{myfile}{name} ); // convert the uploaded file back to binary // javascript "escape" does not encode the plus sign "+", but "urldecode" // in PHP make a space " ". So replace any "+" in the file with %2B first $filename = $fpath.$_FILES{myfile}{name}; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); $contents = preg_replace("/\+/", "%2B", $contents); $handle = fopen($filename, "w"); fwrite($handle, urldecode($contents)); fclose($handle); ?> Mógłby ktoś rzucić na to okiem ? Byłbym bardzo wdzięczny za każdą okazaną pomoc. Pozdrawiam Użytkownik sauron edytował ten post 21 maj 2008, 19:28 Rozwiązanie jest b. proste (polecma napisanie tego od podstaw ;-): http://pl2.php.net/m.../pl/ref.ftp.php czyli np.: $uchwyt=ftp_connect('adres.ip.lub.host');//łączymy się z serwerem ftp_login($uchwyt,'login','hasło');//logujemy się na serwer //obsługa odbierania pliku z formularza i umieszczanie go na serwerze najlepiej pod nazwą sesji użytkownika, żeby nie było prooblemu z równoczesnym dostępem //mamy plik zapisany jako $sesja.nazwa_pliku.rozszerzenie ftp_put ( $uchwyt , 'nazwa pliku na ftp' , 'nazwa pliku z formularza' , 'tryb' );//tryb - FTP_ASCII lub FTP_BINARY (trzeba popróbować które będzie działało, dawno z tego nie korzystałem ale chyba z FTP_BINARY idzie wszystko a ASCII ma czasem problemy //teraz usuwamy plik z serwera lokalnie (jest on już na ftp) ftp_close($uchwyt);//kończymy połaczenie z serwerem ftp Polecam jednak zapoznanie się z wszystkimi funkcjami ftp na podanej na początku stronie Pozdrawiam |
|||
Sitedesign by AltusUmbrae. |