jquery - Passing file data from .Net backend to Javascript front-end -
i have .net (vb/c#) backend on 1 server , javascript/jquery front-end on another. attempting pass file data backend front-end reading file in .net byte array, converting base64 string , passing js front-end along variable indicating file type.
once data in js front-end attempt convert base64 string file blob in order read readasdataurl() can displayed in iframe or downloaded client.
for testing using pdf file. process of passing data works file data not recognized pdf viewer. iframe loads viewer message file not being recognized pdf file.
i have done tone of searching , have gotten lot of questions answered searching stackoverflow eludes me.
any suggestions appreciated. thank you.
update: here vb.net code:
sub onreadfiletoviewer(byval filepath string) dim oktoview boolean = false dim fileblob string = string.empty dim fileencoded string = string.empty if (file.exists(filepath)) try using fread filestream = new filestream(filepath, filemode.open, fileaccess.read) dim bytes() byte = new byte((ctype(fread.length, integer)) - 1) {} dim numbytestoread integer = ctype(fread.length, integer) dim numbytesread integer = 0 while (numbytestoread > 0) ' read may return 0 numbytestoread. dim n integer = fread.read(bytes, numbytesread, _ numbytestoread) ' break when end of file reached. if (n = 0) exit while end if numbytesread = (numbytesread + n) numbytestoread = (numbytestoread - n) end while numbytestoread = bytes.length fileencoded = system.convert.tobase64string(bytes) end using oktoview = true catch ex exception ' end try end if if (oktoview) ' code send data js fron-end end if end sub
and js front-end converting base64 string blob , iframe preview:
function previewfile(file) { var fileblob = b64toblob(file,'application/pdf',''); var reader = new filereader(); var filetype = e.target.getattribute("type"); alert(filetype); reader.onload = function (e) { if (filetype) $("#fileviewerdiv").append('<iframe id="filevieweriframe" class="fileviewer"></iframe>'); // + e.target.result + '">'); $("#filevieweriframe").attr('src', file); //e.target.result); $("#filevieweriframe").dialog(); } reader.readasdataurl(fileblob); } function b64toblob(b64data, contenttype, slicesize) { contenttype = contenttype || ''; slicesize = slicesize || 512; var bytecharacters = atob(b64data); var bytearrays = []; (var offset = 0; offset < bytecharacters.length; offset += slicesize) { var slice = bytecharacters.slice(offset, offset + slicesize); var bytenumbers = new array(slice.length); (var = 0; < slice.length; i++) { bytenumbers[i] = slice.charcodeat(i); } var bytearray = new uint8array(bytenumbers); bytearrays.push(bytearray); } var blob = new blob(bytearrays, {type: contenttype}); return blob; }
the alert(filetype) display correct file type - application/pdf.
i have admit lifted b64toblob() function blog somewhere have forgotten 1 , have lost url site. apologies original author. if recognizes code , knows author/site please let me know
edit b64toblob() jeremy banks - based on answer
Comments
Post a Comment