Este es mi programa simple para descargar un archivo de una cadena varbinary al hacer clic.
Controlador:
public ActionResult Download(string StudentID, string SQNC) { string query = "exec spToGetVarbinaryString'" + StudentID + "','" + SQNC + "' "; string dataStr = GlobalFunction.DataTableToJSON(GlobalFunction.TableFromMSSQL(dbname, query)); dynamic data = JsonConvert.DeserializeObject(dataStr); byte[] file = data[0].ImgVarbinary; return File(file, System.Net.Mime.MediaTypeNames.Application.Octet, (string)data[0].FileName); }como descargo el archivo:
<a type="button" href="ControllerName/Download?StudentID=${row.StudentID}&SQNC=${row.SQNC}" class="btn btn-primary btn-sm active" role="button" aria-pressed="true">View File</a>Ahora, quiero que el archivo en lugar de descargarse al hacer clic, aparecerá en la pestaña o nuevo. Probé el método de convertir mi cadena Varbinary a Base64, pero no lee el archivo PDF para este ejemplo a continuación.
De VarBinary a Base64 en SQL
update a set a.ImgStr=baze64 from #mytemptable cross apply (select ImgVarbinary as '*' for xml path('')) T (baze64) where a.ImgVarbinary is not nullVisualización del archivo PDF Base64 (la pantalla no funciona)
<iframe width="500" height="500" src="data:application/pdf;base64,<base64stringhere>"Encontré una muestra de datos base64 en este enlace JSFiddle , lo probé en local y funciona.
Ejemplo de imagen (uno a la izquierda: mi cadena base64. Uno a la derecha: base64 del js fiddle) 
¿Cómo puedo hacer esto y por qué mi cadena base64 no funciona bien? Gracias por responder.
agregue algo como esto en el evento de clic para leer bytes ...
public class LoadPdfFileHandler : IHttpHandler { public bool IsResuable => false; public void ProcessRequest(HttpContext context) { string id = context.Request.QueryString["id"]; // TODO: Verify that the user is allowed to view the specified record. using (var connection = new MySqlConnection("...")) using (var command = new MySqlCommand("SELECT Data, ContentType FROM SomeTable WHERE ID = @ID", connection)) { command.Parameters.AddWithValue("@ID", id); connection.Open(); using (var reader = command.ExecuteReader(CommandBehavior.CloseConnection)) { if (!reader.Read()) { context.Response.StatusCode = 404; return; } string contentType = (string)dr["ContentType"]; if (string.IsNullOrEmpty(contentType)) contentType = "application/octet-stream"; context.Response.ContentType = contentType; byte[] bytes = (byte[])dr["Data"]; context.Response.BinaryWrite(bytes); } } } }Luego escriba marco usando esto...
myiframe.Attributes["src"] = ResolveUrl("~/loadPdfFile.ashx?id=" + idOfTheRecordToLoad);Puede consultar otra referencia aquí referencia de imagen