将文件数据从.Net后端传递到Javascript前端
我在一台服务器上有一个.Net(VB/C#)后端,在另一台服务器上有一个javascript/jquery前端。我试图将文件数据从后端传递到前端,方法是将.Net中的文件作为字节数组读取,将其转换为base64字符串,并将其与指示文件类型的变量一起传递到js前端 一旦数据进入js前端,我尝试将base64字符串转换为文件blob,以便使用readAsDataURL()读取它,以便它可以显示在iframe中或由客户端下载 对于测试,我使用的是pdf文件。传递数据的过程有效,但pdf查看器无法识别文件数据。iframe加载查看器,但我收到一条消息,说明该文件未被识别为pdf文件 我做了一个搜索的基调,通过搜索得到了很多问题的答案,但这让我无法理解 如有任何建议,将不胜感激。多谢各位 更新: 以下是我的VB.Net代码:将文件数据从.Net后端传递到Javascript前端,javascript,jquery,.net,vb.net,Javascript,Jquery,.net,Vb.net,我在一台服务器上有一个.Net(VB/C#)后端,在另一台服务器上有一个javascript/jquery前端。我试图将文件数据从后端传递到前端,方法是将.Net中的文件作为字节数组读取,将其转换为base64字符串,并将其与指示文件类型的变量一起传递到js前端 一旦数据进入js前端,我尝试将base64字符串转换为文件blob,以便使用readAsDataURL()读取它,以便它可以显示在iframe中或由客户端下载 对于测试,我使用的是pdf文件。传递数据的过程有效,但pdf查看器无法识别文
Sub OnReadFileToViewer(ByVal filePath As String)
Dim okToView As Boolean = False
Dim fileBLOB As String = String.Empty
Dim fileEncoded As String = String.Empty
If (file.Exists(filePath)) Then
Try
Using fRead As FileStream = New FileStream(filePath, FileMode.Open, FileAccess.Read)
Dim bytes() As Byte = New Byte((CType(fRead.Length, Integer)) - 1) {}
Dim numBytesToRead As Integer = CType(fRead.Length, Integer)
Dim numBytesRead As Integer = 0
While (numBytesToRead > 0)
' Read may return anything from 0 to numBytesToRead.
Dim n As Integer = fRead.Read(bytes, numBytesRead, _
numBytesToRead)
' Break when the end of the file is reached.
If (n = 0) Then
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 As Exception
'
End Try
End If
If (okToView) Then
' Code to send data to js fron-end
End If
End Sub
用于将base64字符串转换为BLOB和iframe预览的my js前端:
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 = [];
for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);
var byteNumbers = new Array(slice.length);
for (var i = 0; i < 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;
}
函数预览文件(文件){
var fileBlob=b64toBlob(文件,'application/pdf','';
var reader=new FileReader();
var fileType=e.target.getAttribute(“类型”);
警报(文件类型);
reader.onload=函数(e){
if(文件类型)
$(“#fileViewerDiv”).append(“”);//+e.target.result+“>”;
$(“#fileVieweriFrame”).attr('src',file);/e.target.result);
$(“#FileViewerFrame”).dialog();
}
reader.readAsDataURL(fileBlob);
}
函数b64toBlob(b64Data、contentType、sliceSize){
contentType=contentType | |“”;
切片大小=切片大小| | 512;
var byteCharacters=atob(b64Data);
var ByteArray=[];
对于(变量偏移量=0;偏移量
警报(文件类型)确实显示正确的文件类型-application/pdf
我必须承认,我从某个博客中提取了b64toBlob()函数,但我忘记了是哪一个,并丢失了该网站的URL。我向原作者道歉。如果有人认识该代码并知道作者/网站,请告诉我
编辑
b64toBlob()由Jeremy Banks编写-您使用ASP.NET吗?请共享正在读取数据的客户端JS片段,以及服务器端响应以及正在发送的内容类型。这将有助于理解问题。@DLeh后端未使用ASP.NET。@Vaibhav代码已添加。原始
b64toBlob()
可能来自Jeremy Banks。