download file from server asp.net
I want to download a file from server to a local host.
i have a code from the net which should work but is not working
protected void Button4_Click(object sender, EventArgs e)
{
//To Get the physical Path of the file(test.txt)
string filepath = Server.MapPath("test.txt");
// Create New instance of FileInfo class to get the properties of the file being downloaded
FileInfo myfile = new FileInfo(filepath);
// Checking if file exists
if (myfile.Exists)
{
// Clear the content of the response
Response.ClearContent();
// Add the file name and attachment, which will force the open/cancel/save dialog box to show, to the header
Response.AddHeader("Content-Disposition", "attachment; filename=" + myfile.Name);
// Add the file size into the response header
Response.AddHeader("Content-Length", myfile.Length.ToString());
// Set the ContentType
Response.ContentType = ReturnExtension(myfile.Extension.ToLower());
// Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead)
Response.TransmitFile(myfile.FullName);
// End the response
Response.End();
}
}
private string ReturnExtension(string fileExtension)
{
开发者_开发知识库 switch (fileExtension)
{
case ".htm":
case ".html":
case ".log":
return "text/HTML";
case ".txt":
return "text/plain";
case ".doc":
return "application/ms-word";
case ".tiff":
case ".tif":
return "image/tiff";
case ".asf":
return "video/x-ms-asf";
case ".avi":
return "video/avi";
case ".zip":
return "application/zip";
case ".xls":
case ".csv":
return "application/vnd.ms-excel";
case ".gif":
return "image/gif";
case ".jpg":
case "jpeg":
return "image/jpeg";
case ".bmp":
return "image/bmp";
case ".wav":
return "audio/wav";
case ".mp3":
return "audio/mpeg3";
case ".mpg":
case "mpeg":
return "video/mpeg";
case ".rtf":
return "application/rtf";
case ".asp":
return "text/asp";
case ".pdf":
return "application/pdf";
case ".fdf":
return "application/vnd.fdf";
case ".ppt":
return "application/mspowerpoint";
case ".dwg":
return "image/vnd.dwg";
case ".msg":
return "application/msoutlook";
case ".xml":
case ".sdxl":
return "application/xml";
case ".xdp":
return "application/vnd.adobe.xdp+xml";
default:
return "application/octet-stream";
}
}
now when the button is clicked the file should be downloaded from the server to the local host computer... but nothing seems to be happening...
i have the test.txt on the desktop of the serer... the save file option also does not come on the client side..
I publish the files and put it in the inetpub folder of the server and run the GUI from the client side.. everything works except this...
any suggestions...please help
this program downloads a file if it is present in the inetpub folder.. instead i want to download from any location within the server...
??
Write On Button Click On which u Want to Download Files
protected void Button1_Click(object sender, EventArgs e)
{
string allowedExtensions = ".mp4,.pdf,.m4v,.gif,.jpg,.png,.swf,.css,.htm,.html,.txt";
// edit this list to allow file types - do not allow sensitive file types like .cs or .config
string fileName = "Images/apple.jpg";
string filePath = "";
//if (Request.QueryString["file"] != null) fileName = Request.QueryString["file"].ToString();
//if (Request.QueryString["path"] != null) filePath = Request.QueryString["path"].ToString();
if (fileName != "" && fileName.IndexOf(".") > 0)
{
bool extensionAllowed = false;
// get file extension
string fileExtension = fileName.Substring(fileName.LastIndexOf('.'), fileName.Length - fileName.LastIndexOf('.'));
// check that we are allowed to download this file extension
string[] extensions = allowedExtensions.Split(',');
for (int a = 0; a < extensions.Length; a++)
{
if (extensions[a] == fileExtension)
{
extensionAllowed = true;
break;
}
}
if (extensionAllowed)
{
// check to see that the file exists
if (File.Exists(Server.MapPath(filePath + '/' + fileName)))
{
// for iphones and ipads, this script can cause problems - especially when trying to view videos, so we will redirect to file if on iphone/ipad
// if (Request.UserAgent.ToLower().Contains("iphone") || Request.UserAgent.ToLower().Contains("ipad")) { Response.Redirect(filePath + '/' + fileName); }
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.WriteFile(Server.MapPath(filePath + '/' + fileName));
Response.End();
}
else
{
litMessage.Text = "File could not be found";
}
}
else
{
litMessage.Text = "File extension is not allowed";
}
}
else
{
litMessage.Text = "Error - no file to download";
}
}
You mention that test.txt is on the server's desktop. Is it also located right beside the page you're testing? Try either fully-qualifying the path the to the desktop ("C:\Documents and Settings\JohnDoe\Desktop\test.txt") or copying the file to sit alongside the .aspx page.
ok so i put a Response.Write after
string filepath = Server.MapPath("test.txt");
and found that file path was pointing to the inetpub folder... so when i put the test.txt in that folder it worked... so the program is right..
but now if the file is any other location in the server how should i modify the program... i am working on it but any suggestions are welcome
Ok i got the answer for any path too
i remove the server.mappath and put the full location instead.. dont know why it was giving problems before.. but now it is working...
You can change folder to your location:
Directory.SetCurrentDirectory(HttpContext.Current.Server.MapPath("~ your path in here")
精彩评论