2013-09-20 6 views
2

Я пытаюсь создать в asp.net 2,0 веб-службы, чтобы загрузить файл (всплывающее окно с Открыть или Сохранить файл), таким образом:Загрузить файл через веб-службу и jquery?

$.ajax({ 
     type: "POST", 
     url: "webservice.asmx/download", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     success: function (res) { 
      console.log("donwloaded"); 
     } 
    }); 

А в «WebService. ASMX»

[WebMethod()] 
public byte[] DownloadFile(string FName) 
{ 
    System.IO.FileStream fs1 = null; 
    fs1 = System.IO.File.Open(FName, FileMode.Open, FileAccess.Read); 
    byte[] b1 = new byte[fs1.Length]; 
    fs1.Read(b1, 0, (int)fs1.Length); 
    fs1.Close(); 
    return b1; 
} 

[WebMethod] 
public void download() 
{ 
    string filename = "test.txt"; 
    string path = "C:\\test.txt"; 

    byte[] ls1 = DownloadFile(path); 
    HttpResponse response = Context.Response; 

    response.Clear(); 
    response.BufferOutput = true; 
    response.ContentType = "application/octet-stream"; 
    response.ContentEncoding = Encoding.UTF8; 
    response.AppendHeader("content-disposition", "attachment; filename=" + filename); 

    response.BinaryWrite(ls1); 

    response.Flush(); 
    response.Close(); 
} 

Таким образом, я вижу содержимое файла (я не могу загрузить файл Whith всплывающего окна).

Где я ошибаюсь? Можно ли сделать это?

заранее спасибо

+0

Вам нужно будет открыть новое окно и вызвать эту часть ajax в этом новом окне. –

+1

Я думаю, что тип контента отличается для файла, чтобы он отображался как загружаемый. –

+0

Извините, но я не понимаю, что вы имеете в виду. Фактически, вызов ajax находится в событии click на странице aspx .... (для «всплывающего окна» я имею в виду окно подтверждения по умолчанию в браузере) – Webman

ответ

1

, что не является хорошим способом, чтобы сделать загрузку файлов через всплывающее окно, просто открыть новые попы и сделать URL этого окна, чтобы указать на файл или WebService URL.

window.open("fileurl" ) 
0

хороший способ сделать это просто перенаправлять браузер на «webservice.asmx/загрузки» вместо вызова, что с помощью AJAX. т.е.

window.location.href = 'webservice.asmx/download'; 

когда браузер обнаружит вас возвращение октета-поток, он будет просить, чтобы загрузить файл, но не ясно/eraze страницы вы были на.

+0

, но могу ли я отправить объект json на сервер таким образом? – Webman

+0

вы можете сериализовать json-объект, а затем urlencode, но это неправильный подход и не рекомендуется – sino

+0

нет, и я не заметил, что вы хотите, чтобы загрузка началась в результате POST ... не отличная идея, я думаю - нет загрузки продолжить – Artemiy

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