Подтвердить что ты не робот

Xmlhttprequest для локальных файлов

У меня есть путь к файлу, который я хочу отправить на веб-сервисе для отдыха. Я использую объект xmlhttprequest. Сообщение выглядит следующим образом:

var url = "http://localhost:8080/RestWSGS/jersey/gridsense";
 var boundary = "--------------" + (new Date).getTime();
  xmlHttp.open('POST', url, true);
  xmlHttp.onreadystatechange = function ()
  {
      if (this.readyState != 4)
        return;

      var result =this.responseText;
    document.write(result);
    };
  xmlHttp.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);

var  part ="";
 part += 'Content-Disposition: form-data; ';
  part += 'name="' + document.getElementById("filename").name + '" ; ';
  //alert(document.getElementById("filename").value);
  part += 'filename="'+ document.getElementById("filename").value +  '";\r\n';

  part += "Content-Type: application/xml";
  part += "\r\n\r\n"; // marks end of the headers part
  part += 'filename="'+ document.getElementById("filename").value +  '";\r\n';
  part+= data;
   var request = "--" + boundary + "\r\n";
  request+= part /* + "--" + boundary + "\r\n" */;
  request+= "--" + boundary + "--" + "\r\n";
  alert(request); 
  xmlHttp.send(request);  

Данные, которые я хочу отправить, находятся на локальном диске клиента. Я хочу использовать метод get для него:

var str = document.getElementById("filename").value;


    var data;
    var xmlhttp1 = getNewHTTPObject();
    xmlhttp1.open("GET", 
    "file:///New Folder/" +document.getElementById("filename").value , false);

    xmlhttp1.send(null);
    alert('hi' + xmlhttp1.status);
    xmlhttp1.onreadystatechange = function()    {
        if (this.status == 0)
        {
            alert("resp " + this.responseText);
            data = this.responseText;
        }
    }

Файл://не работает. Если я поместил свой файл в каталог клиента и удалю файл:///, то я могу хотя бы увидеть xmlhttprequest open и указать статус 200 (думаю, хорошо!!). Я прочитал, что для локального состояния проверки файлов == 0 вместо readystatus == 4, поэтому я сделал это, но он все еще дает переменную данных как undefined, и поэтому файл не переходит на сервер. Изначально, когда я дал форму action в качестве моего остального url, она была загружена в порядке. Поскольку я не использую html5, я не могу получить объект File из элемента input type = file. Я хочу использовать объект xmlhttprequest для этого вместо элемента формы напрямую.  Пожалуйста, помогите мне с этой проблемой с любыми предложениями или подсказками KAvita​​p >


Даже если я загружаю, используя форму представления формы, как я могу использовать возвращаемое значение веб-службы. Вот почему мне нужно использовать xmlhttpRequest. Если кто-нибудь может предложить, как будет использоваться возвращаемое значение из действия, это будет здорово!! Kavita​​p >

4b9b3361

Ответ 1

Исторически вы не можете запрашивать локальные файлы из JavaScript (или не должны допускаться, или что-то странное). Это будет серьезным нарушением безопасности.

Есть только несколько обстоятельств, когда вы можете это сделать, но в целом они включают определенные параметры безопасности, которые необходимо установить для вашего браузера, либо снять ограничение, либо уведомить текущий процесс выполнения страницы, которому это предоставляется. исключительное право. Это, например, выполнимо в Firefox, редактируя свойства. Это также обычно нормально при разработке расширений браузера (например, для Chrome или FF), если они запрашивают разрешения доступа к файлам.

Еще один способ обойти это ограничение - разместить локальный веб-сервер и объявить на нем виртуальные узлы, чтобы иметь возможность выполнять такой запрос AJAX для извлечения локальных файлов. Для веб-разработчиков довольно часто прибегать к этой трюке (скорее, как стандарт, на самом деле), чтобы иметь преимущества локального развития, но в то же время тиражировать производственную систему. Например, вы можете использовать легкий веб-сервер, например Jetty.

(Еще одно недовольство, с которым вы, похоже, столкнулись, заключается в том, что некоторые браузеры - по крайней мере, некоторые более старые версии FF, например 3.6.x, иногда возвращают положительный код ошибки, например 200, когда они блокируются в соответствии с их внутренние политики безопасности. Может быть довольно запутанным на некоторое время...).

Наконец, новые API-интерфейсы HTML5 предоставляют некоторые новые конструкции для доступа к локальным файлам. Учитывая чтение:

Другие вопросы SO также предоставляют дополнительные указатели:

Ответ 2

Я использую iframe.

<div class="item" onclick="page(event)">HTML5</div>

<iframe id="page" src="">
function page(e) {
    trigger = e.currentTarget.innerHTML;
    docname = new String(trigger + ".txt");
    document.getElementById("page").src = docname;
}

Ответ 3

Я нашел легкое решение. Вы должны добавить "? Application/xhtml + xml" за вашим локальным url файлом:///.. ".