Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件数据从.Net后端传递到Javascript前端_Javascript_Jquery_.net_Vb.net - Fatal编程技术网

将文件数据从.Net后端传递到Javascript前端

将文件数据从.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查看器无法识别文

我在一台服务器上有一个.Net(VB/C#)后端,在另一台服务器上有一个javascript/jquery前端。我试图将文件数据从后端传递到前端,方法是将.Net中的文件作为字节数组读取,将其转换为base64字符串,并将其与指示文件类型的变量一起传递到js前端

一旦数据进入js前端,我尝试将base64字符串转换为文件blob,以便使用readAsDataURL()读取它,以便它可以显示在iframe中或由客户端下载

对于测试,我使用的是pdf文件。传递数据的过程有效,但pdf查看器无法识别文件数据。iframe加载查看器,但我收到一条消息,说明该文件未被识别为pdf文件

我做了一个搜索的基调,通过搜索得到了很多问题的答案,但这让我无法理解

如有任何建议,将不胜感激。多谢各位

更新: 以下是我的VB.Net代码:

     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。