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\"> <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) {
}
});
}
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