JavaScript Datei hochladen - wo ist der fehler ?

212N3rD

Cadet 4th Year
Registriert
Juli 2008
Beiträge
70
ich möchte dateien hochladen per chunk upload und leider will es nicht klappen.
beim upload steht immer "starting..." sonst passiert nichts.


Code:
<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
<meta charset=utf-8 />
    <style>
  #progressbar .ui-progressbar-value {
    background-color: #ccc;
  }
  </style>
<title>JS Bin</title>
  <script>

    // my URL to load the file to     
    var uri = "www.homepage.de/upload/";
    // 1Mb chunk sizes
    var chunkSize = 1024*1024; 
    // track the number of chunks
    var chunks = 0;
    // track how much has been sent
    var bytesUploaded=0;
    // the file to load
    var selectedFile;
    
      $(document).ready(function () {
          $("#file").bind('change', handleFileSelect);
          if (! ( window.File && window.FileReader && window.FileList && window.Blob)) {
              alert('The File APIs are not fully supported in this browser.');
          }
        }); 
         
        //Read the file and find out how many blocks we would need to split it.
        function handleFileSelect(e) {
            var files = e.target.files;
            selectedFile = files[0];
            $("#fileName").text(selectedFile.name);
            $("#fileSize").text(selectedFile.size + " bytes");
            $("#fileDate").text(selectedFile.lastModifiedDate);
          
            // number of chunks
            chunks = Math.ceil(selectedFile.size/chunkSize);
            $("#chunks").text(chunks);
          
        }
    
    function sendChunk(chunkNumber){
        var reader = new FileReader();
        var start = chunkSize * (chunkNumber-1);
        var end = start + chunkSize -1;
        var fileContent = selectedFile.slice(start, end);   
        var length = fileContent.size;
      
        reader.readAsArrayBuffer(fileContent);      
      
      $.ajax({
        url: uri,
        type: "POST",
        data: fileContent,
        processData: false,
        beforeSend: function(xhr) {
                        xhr.setRequestHeader('x-chunknumber', chunkNumber);
                        xhr.setRequestHeader('x-filename', selectedFile.name);
                        xhr.setRequestHeader('x-offset', start );
                        xhr.setRequestHeader('x-chunksize', length );
                        xhr.setRequestHeader('x-content-type', selectedFile.type );

                    },
        success: function (data, status) {
          console.log(data);
          console.log(status);
          bytesUploaded += length;
          var percentComplete = ((bytesUploaded / selectedFile.size) * 100).toFixed(2);
          
          $("#fileUploadProgress").text(percentComplete + " %");
          $("#downloadLink").html("<a href='http://www.homepage.de/upload/" + selectedFile.name + "' target='_new'>New File</a>");
          if ( chunkNumber < chunks ) {
             sendChunk(chunkNumber+1);
          }
        },
        error: function(xhr, desc, err) {
          console.log(desc);
          console.log(err);
        }
      });
      
    }    
    
    function sendIt(){
       $("#fileUploadProgress").text("Starting......");
       bytesUploaded=0;
       sendChunk(1);
    }
        
  </script>
</head>
<body>
    <form>
        <div style="margin-left: 20px;">
            <h1>APEX Listener Chunked File Upload</h1>
            <p>
                <span class="input-control text">
                    <input type="file" id="file" name="file" style="width: 50%"/>
                </span>
            </p>
            <div id="output">
                 
              <h1>File Details:</h1><br />
              <table><tr><td>Name:</td><td><span id="fileName"></span></td></tr>
                    <tr><td>File Date:</td><td><span id="fileDate"></span></td></tr>
                    <tr><td>File Size:</td><td><span id="fileSize"></span></td></tr>
                    <tr><td>Number of Chunks:</td><td><span id="chunks"></span></td></tr>
                </table>
                <p>
                    <input type="button" value="Upload File" onclick="sendIt()"/>
                </p>
                <p>
                    <strong>Progress</strong>: <span id="fileUploadProgress">0.00 %</span>
                  <div id="progressbar"></div>

                </p>
                    New URL: <span id="downloadLink"></span>

            </div>
        </div>
        <div>
        </div>
    </form>
</body>
</html>
 
Und nun? Sollen wir hier deinen Code debuggen? Irgendwo überhaupt einen Ansatz? Setz nen Breakpoint (hat jeder Browser mitgeliefert) auf Zeile 90 und geh Schritt für Schritt durch.
 
Zeile 15 ... wohin willst du uploaden?
 
zeile 15 habe ich schon mit ftp://user:pass@www.homepage.de/upload
und www. homepage.de/upload versucht leider steht immer nur "Starting..."
wahrscheinlich bekomme ich keine ftp verbindung.
 
Ähm ... das ist http-Upload .... nix FTP, das kann so nicht gehen. Und homepage.de durch deinen eigenen Seitennamen ersetzt? bzw. /upload durch deinen am Webserver beschreibbaren Pfad ersetzt?

PS: beschreibbar heisst dass der User mit dem der Apache läuft in diesem Verzeichnis Schreibrechte braucht
 
Braucht das nicht sogar auf der Gegenseite ein Stück Script, das die Datenhäppchen entgegen nimmt und wegschreibt? Was stand denn in der Anleitung zum dem JavaScript?...
 
Der Ping auf >www.homepage.de< liefert >64.233.166.121< => >https://ipinfo.io/64.233.166.121<

404. That’s an error.

The requested URL / was not found on this server. That’s all we know.

Der FTP-Port reagiert ebenfalls nicht auf Anfragen. Bevor ein FTP-Programm geschrieben wird, sollte mit einem herkömmlichen FTP-Programm das Funktionieren des Datenaustausches mit der Gegenstelle sichergestellt sein.


Mfg jw
 
Zuletzt bearbeitet:
KillerCow schrieb:
Braucht das nicht sogar auf der Gegenseite ein Stück Script, das die Datenhäppchen entgegen nimmt und wegschreibt?
Natürlich. JS allein KANN keinen Upload realisieren, denn JS läuft immer 100% auf Client-Seite.
 
Natürlich. JS allein KANN keinen Upload realisieren, denn JS läuft immer 100% auf Client-Seite.
Naja... das gepostete Skript läuft auf der Clientseite, ja. Auf der empfangenden Seite kann durchaus auch JS laufen, aber irgendwer muss halt die Daten in Empfang nehmen und ftp scheidet hier wohl aus ;)
 
OK, serverseitiges JS lass ich grundsätzlich außen vor. Die Technologie ist toll und bietet wirklich interessante Möglichkeiten, aber der Verbreitungsgrad ist noch vollkommen unbedeutend.
Ich glaube kaum, dass der TE einen NodeJS - Server betreibt, wenn er hier allen Ernstes mit FTP-Verbindungen anfangen will.
 
ok am server muss ich dann das noch einrichten.
ziemlich neu das ganze.
 
Zurück
Oben