2015-07-30 2 views
5

Chyba brakuje mi kodu po stronie JavaScript. Pobierane są dokumenty dla każdego żądania. Kiedy użytkownik kliknie na link, otrzymuję dane dokumentu i przesyłam je strumieniowo. Widzę na Fiddler, że dane spadają, ale link do dokumentu .txt się nie otwiera.Link nie otwiera się po przesłaniu strumieniowym danych dokumentu w dół

[HttpGet] 
    public HttpResponseMessage GetDataFiles(Int64 Id) 
    { 
     var results = context.PT_MVC_RequestFile.Where(x => x.RowId == Id).FirstOrDefault(); 
     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 

     try 
     { 
      if (results != null) 
      { 
       response.Headers.AcceptRanges.Add("bytes"); 
       response.StatusCode = HttpStatusCode.OK; 
       response.Content = new ByteArrayContent(results.Data); 
       response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
       response.Content.Headers.ContentDisposition.FileName = results.FileName; 
       response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
       response.Content.Headers.ContentLength = results.Data.Length; 
      } 
     } 
     catch (EntityException ex) 
     { 
      throw new EntityException("GetFiles Failed" + ex.Message); 
     } 

     return response; 
    } 

Najpierw pobrałem wszystkie dokumenty dla tego żądania, a jeśli użytkownik kliknie plik, wywołuję działanie strumienia pobierania.

$.ajax({ 
        url: url, 
        type: 'GET', 
        // data: JSON.stringify(model, null), 
        contentType: "application/json", 
        success: function (data) { 

         if (data != "") { 
          $("#fileLength").val(data.length); 
          // alert(data.length); 
          $.each(data, function (i, item) { 
           var newDiv = $(document.createElement('div')).attr("id", 'file' + i); 
           newDiv.html("<input id=\"cb" + i + "\" type=\"checkbox\"> &nbsp; <a href=\"#\" onclick=\"GetData('" + item.RowId + "','" + item.mineType + "')\" >" + item.FileName + "</a>"); 
           newDiv.appendTo("#fileRows"); 
          }); 
         } else { 

         } 
        }, 
        error: function (xhr, ajaxOptions, thrownError) { 

        } 
       }); 

Myślę, że brakuje mi czegoś po sukcesie. W jakiś sposób pobiera dane, ale link się nie otwiera. Czy może to być typ zawartości nie jest ustawiony, lub że uważa, że ​​jest to dane JSON? Pomóż w niektórych pomysłach.

Oto link:

function GetData(rowId,mineType) { 
      // alert(mineType); 
      var url = "api/MyItemsApi/GetDataFiles/" + rowId; 

      $.ajax({ 
       url: url, 
       type: 'GET', 
       //data: JSON.stringify(model, null), 
       contentType: "application/json", 
       success: function (data) { 

       }, 
       error: function (xhr, ajaxOptions, thrownError) { 

       } 

      });    
     } 
+0

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 6429 Content-Type: application/txt Wygasa: -1 Accept-zakresach: bajtów Server: Microsoft-IIS/8.0 Content-Disposition: attachment; filename = Bare.txt X-aspnet Wersja: 4.0.30319 X-SourceFiles: = UTF-8 B QzpcVXNlcnNcYzBhYmRnZVxEb2N1bWVudHNcVmlzdWFsIFN0dWRpbyAyMDEyXFByb2plY3RzXFByb2plY3QuVHJhY2tlci5XZWIuU29sdXRpb25cUHJvamVjdC5UcmFja2VyLldlYlxhcGlcTXlJdGVtc0FwaVxHZXREYXRhRmlsZXNcMQ == = X-Powered-by?? ASP.NET Data: Thu, 30 lipca 2015 13:33:46 GMT Oto co schodzi w nagłówku, zmieniłem go na txt, ale wciąż nie ma szczęścia – georges

Odpowiedz

0

nie można łatwo pobrać plik za pośrednictwem żądania AJAX. Zalecam opublikować dane na pustej stronie z formularza, zamiast Ajax (możesz wypełnić ten formularz i opublikować go za pomocą jQuery, jeśli potrzebujesz). Jeśli jesteś zainteresowany, mogę poprowadzić Cię przez to, daj mi znać.

Jeśli nadal chcesz pobrać Ajax, proponuję zapoznać się z postem pod numerem this.

Powiązane problemy