protected void Page_Load(object sender, EventArgs e) { documentViewer.DocumentHandlerType = typeof(DbDocumentHandler); documentViewer.Document = "1"; // a file path or identifier //documentViewer.DocumentSource = new DocumentSource( // new DocumentInfo("1", "filename"), // new StreamResult(stream) //); } public class DbDocumentHandler : IDocumentHandler { string strConnString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString; // Get the document information required for the current input file. // This is called for determining the cache key and document format whenever // DocumentViewer requests a document. // // inputFile parameter will be the value that was set in DocumentViewer.Document property, i.e. // the input file that was requested to be loaded in DocumentViewer // // Return a DocumentInfo instance initialized with required information from this method. public DocumentInfo GetInfo(string inputFile, DocumentHandlerParameters handlerParameters) { var fileId = inputFile; string fileName; // Get your parameters that were set in documentViewer.DocumentHandlerParameters property // The type for the generic Get<T> method should be the same as the set value's type. var connectionString = handlerParameters.Get<string>(strConnString); using (var connection = new SqlConnection(strConnString)) { connection.Open(); var sql = "SELECT Name FROM Files WHERE Id=" + fileId; using (var command = new SqlCommand(sql, connection)) using (var reader = command.ExecuteReader()) { if (!reader.Read()) throw new Exception("File not found"); // read the file name from the selected row (first column in above query) fileName = reader.GetString(0); } } return new DocumentInfo( // uniqueId parameter (required): // The unique identifier that will be used for generating the cache key for this document. // For instance, it can be an ID from your database table or a simple file name; // you just need to make sure this ID varies for each different document so that they are cached correctly. // For example for files on disk, // we internally use a string combination of file extension, file size and file date for uniquely // identifying them, this way cache collisions do not occur and we can resuse the cached file // even if the file name before extension is changed (because it's still the same document). fileId, // fileName parameter (optional but recommended): // The file name which will be used for display purposes such as when downloading the document // within DocumentViewer> or for the subfolder name prefix in cache folder. // It will also be used to determine the document format from extension if format // parameter is not specified. If not specified or empty, uniqueId will be used // as the file name. fileName ); } // Open a readable stream for the current input file. // This is called only when necessary, i.e first time the document is loaded. For consecutive views // as long as cached files are valid, it will not be called. This can be also called when "Download" // button is clicked to download the original document. // // inputFile parameter will be the value that was set in DocumentViewer.Document property, i.e. // the input file that was requested to be loaded in DocumentViewer // // inputOptions parameter will be determined according to the input document format // Usually you will not need to check this parameter as inputFile parameter should be sufficient // for you to locate and open a corresponding stream. // // Return a StreamResult instance initialized with a readable System.IO.Stream object. public StreamResult OpenRead(string inputFile, InputOptions inputOptions, DocumentHandlerParameters handlerParameters) { var fileId = inputFile; byte[] fileBytes; // Get your parameters that were set in documentViewer.DocumentHandlerParameters property // The type for the generic Get<T> method should be the same as the set value's type. var connectionString = handlerParameters.Get<string>(strConnString); using (var connection = new SqlConnection(strConnString)) { connection.Open(); var sql = "SELECT Data FROM Files WHERE Id=" + fileId; using (var command = new SqlCommand(sql,connection)) using (var reader = command.ExecuteReader()) { if (!reader.Read()) throw new Exception("File not found"); // read the file data from the selected row (first column in above query) fileBytes = (byte[])reader.GetValue(0); } } // We need to return a stream that has the file contents here. // As we don't have a stream but a byte array, we can wrap it with a MemoryStream. var stream = new MemoryStream(fileBytes); return new StreamResult(stream); } }
The unique identifier that will be used for generating the cache key for this document. For instance, it can be an ID from your database table or a simple file name; you just need to make sure this ID varies for each different document so that they are cached correctly.
documentViewer.Document = "1"; // a file path or identifier
Trouble logging in? Simply enter your email address OR username in order to reset your password.
For faster and more reliable delivery, add notify@gleamtech.com to your trusted senders list in your email software.