2015-01-11 2 views
1

У меня есть устройство, которое имеет этот яваскрипт функцию на его веб-интерфейс:Преобразование яваскрипта Http Загрузить скрипт Завить команду

function upload() { 
    $("#progress").empty(); 
    $("#uploadresult").empty(); 

    // take the file from the input 
    var file = document.getElementById('files').files[0]; 
    var reader = new FileReader(); 
    reader.readAsBinaryString(file); // alternatively you can use readAsDataURL 
    reader.onloadend = function(evt) 
    { 
     // create XHR instance 
     xhr = new XMLHttpRequest(); 

     // send the file through POST 
     xhr.open("POST", 'upload', true); 
     xhr.setRequestHeader('X-Filename', file.name); 

     // make sure we have the sendAsBinary method on all browsers 
     XMLHttpRequest.prototype.mySendAsBinary = function(text){ 
      var data = new ArrayBuffer(text.length); 
      var ui8a = new Uint8Array(data, 0); 
      for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff); 

      if(typeof window.Blob == "function") 
      { 
       var blob = new Blob([data]); 
      }else{ 
       var bb = new (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder)(); 
       bb.append(data); 
       var blob = bb.getBlob(); 
      } 

      this.send(blob); 
     } 

     // let's track upload progress 
     var eventSource = xhr.upload || xhr; 
     eventSource.addEventListener("progress", function(e) { 
      // get percentage of how much of the current file has been sent 
      var position = e.position || e.loaded; 
      var total = e.totalSize || e.total; 
      var percentage = Math.round((position/total)*100); 

      // here you should write your own code how you wish to proces this 
      $("#progress").empty().append('uploaded ' + percentage + '%'); 
     }); 

     // state change observer - we need to know when and if the file was successfully uploaded 
     xhr.onreadystatechange = function() 
     { 
      if(xhr.readyState == 4) 
      { 
       if(xhr.status == 200) 
       { 
        // process success 
        $("#uploadresult").empty().append('Uploaded Ok'); 
       }else{ 
        // process error 
        $("#uploadresult").empty().append('Uploaded Failed'); 
       } 
      } 
     }; 

     // start sending 
     xhr.mySendAsBinary(evt.target.result); 
    }; 
} 

мне кажется, как он использует POST для загрузки файлов, и я пытаюсь загрузить файлы с ним, используя командную строку CURL, и он продолжает терпеть неудачу, вот эта команда, которую я использую: curl -F «[email protected]» myipaddress/upload

и это дает мне: FAILED (это поступающие с сервера)

В чем дело ?!

+0

дорогой друг, то есть javascript. – RutledgePaulV

+0

хорошо ?! Я знаю, что это java, я сказал это в первой строке. Но я хочу сделать то же самое, что этот скрипт делает с CURL (мне не нужен весь процент прогресса и другое дерьмо, которое находится в коде). Я просто знаю, что этот код работает для загрузки на сервер, и именно поэтому я Поместите его здесь – mahanb

+0

JavaScript и Java - это совершенно разные вещи. – RutledgePaulV

ответ

1

Хорошо, давайте пройдем через это.

URL-адрес, что скрипт размещает данные в обозначается этой линией:

xhr.open("POST", 'upload', true);

Итак, мы знаем конечную точку вам нужно попасть в yourdomain.com/upload

Мы видно из этой линии:

xhr.setRequestHeader('X-Filename', file.name);

То, что запрос посылает заголовок с п файла ame, поэтому мы обязательно включим это тоже.

Мы также видим, что он кодирует текст как двоичный файл перед его отправкой, поэтому мы просто отправим фактический файл и не попытаемся сначала прочитать текст или что-то еще.

Таким образом, положить все это вместе, и вы получите что-то вроде этого:

curl -H "X-Filename: yourFileName" -X POST -d @yourFileName http://yourdomain.com/upload

Обратите внимание, что URL-адрес может быть заменен ipaddress/upload в случае, если вы делаете это на местном уровне и не имеют хозяина файлов. Возможно, вам понадобится ПОРТ, в зависимости от вашей конфигурации, и если вы делаете это локально. Это будет выглядеть так: ipaddress:port/upload

+1

О, да! Мне просто нужен -H! Большое спасибо! – mahanb

Смежные вопросы