|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionIt is often a common requirement in a web application to have the ability to download a some sort of file to the clients computer. This article will illustrate how to create and download a text file to the users computer. Using the codeAlthough in the example I actually create the text file before I stream it out to the client, I feel it is important to highlight that you don't necessarily have to do this, as the file could actually exist on the file system and you may want to stream it out to the client. If that is the case you may one need to use the FileStream to read the already existing document. We first open the file for reading and we actually read the file byte for byte into stream, then once we have the file into a stream, we basically then just use the Response object and download the file via the output stream. Response.AddHeader("Content-disposition", "attachment; filename=" + sGenName); Response.ContentType = "application/octet-stream"; Response.BinaryWrite(btFile); Response.End(); The real power in this snippet is in the lines above, by adding header, you are telling the browser to download the file as an attachment. Then you set The ContentType header which is added, sets your MIME type so that the browser knows what kind of file it is about to download. One can choose any of the following MIME types for the browser. ".asf" = "video/x-ms-asf" ".avi" = "video/avi" ".doc" = "application/msword" ".zip" = "application/zip" ".xls" = "application/vnd.ms-excel" ".gif" = "image/gif" ".jpg"= "image/jpeg" ".wav" = "audio/wav" ".mp3" = "audio/mpeg3" ".mpg" "mpeg" = "video/mpeg" ".rtf" = "application/rtf" ".htm", "html" = "text/html" ".asp" = "text/asp" 'Handle All Other Files = "application/octet-stream" A full example of how to go about downloading a text file could like the code below. C#protected void Button1_Click(object sender, EventArgs e) { string sFileName = System.IO.Path.GetRandomFileName(); string sGenName = "Friendly.txt"; //YOu could omit these lines here as you may not want to save the textfile to the server //I have just left them here to demonstrate that you could create the text file using (System.IO.StreamWriter SW = new System.IO.StreamWriter(Server.MapPath("TextFiles/" + sFileName + ".txt"))) { SW.WriteLine(txtText.Text); SW.Close(); } System.IO.FileStream fs = null; fs = System.IO.File.Open(Server.MapPath("TextFiles/" + sFileName + ".txt"), System.IO.FileMode.Open); byte[] btFile = new byte[fs.Length]; fs.Read(btFile, 0, Convert.ToInt32(fs.Length)); fs.Close(); Response.AddHeader("Content-disposition", "attachment; filename=" + sGenName); Response.ContentType = "application/octet-stream"; Response.BinaryWrite(btFile); Response.End(); } VB.NETDim strFileName As String = System.IO.Path.GetRandomFileName() Dim strFriendlyName As String = "Friendly.txt" Using sw As New System.IO.StreamWriter(Server.MapPath("TextFiles/" + strFileName + ".txt")) sw.WriteLine(txtText.Text) sw.Close() End Using Dim fs As System.IO.FileStream = Nothing fs = System.IO.File.Open(Server.MapPath("TextFiles/" + strFileName + ".txt"), System.IO.FileMode.Open) Dim btFile(fs.Length) As Byte fs.Read(btFile, 0, fs.Length) fs.Close() With Response .AddHeader("Content-disposition", "attachment;filename=" & strFriendlyName) .ContentType = "application/octet-stream" .BinaryWrite(btFile) .End() end with ConclusionUsing this approach you should be able to download all files on Windows systems, but there are some issues with Macintosh systems. Specifically, you may not be able to download the files, instead they will always open up in the browser as expected. References
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||