开发中常常遇到这样的问题:需要将服务器端的文件下载到客户端。这种情况分为两种,一种是windows环境,一种是web环境。前两天在winform开发中就遇到过这样一个问题,上网搜索后没有发现现成的demo,所以自己花费了一点时间,做了一个简单的文件保存的demo,分享如下:
首先需要写一个下载的方法,将其抽象为一个静态类,以方便调用,如下:
public static class FileHelper { /// <summary> /// 下载服务器文件至客户端,Create By Wangjianhui /// </summary> /// <param name="URL">被下载的文件地址,绝对路径</param> /// <param name="DirFilePath">另存放的目录</param> public static void DownloadFileToLocal(string URL, string DirFilePath,out string errorMeesage) { WebClient client = new WebClient(); string fileName = URL.Substring(URL.LastIndexOf("\\") + 1); //被下载的文件名 //string Path = Dir + fileName; //另存为的绝对路径+文件名 try { WebRequest myre = WebRequest.Create(URL); errorMeesage = String.Empty; } catch (Exception e1) { errorMeesage = e1.Message; //MessageBox.Show(e1.Message, "Error"); } try { client.DownloadFile(URL, DirFilePath); errorMeesage = String.Empty; } catch (Exception e2) { errorMeesage = e2.Message; //MessageBox.Show(e2.Message, "Error"); } } }
现在遇到一个难点,就是保存的路径不能写死,而是由客户自己指定,由此很自然的想到了SaveFileDialog控件,在Form窗体中添加一个SaveFileDialog控件,保存按钮的代码如下:
private void btnSave_Click(object sender, EventArgs e) { string sourceFile="E:\\FileFolder\\123.fff"; System.IO.FileInfo f = new System.IO.FileInfo(sourceFile); string sourceFileName = f.Name;//原文件名称 string dirFilePath = string.Empty; saveFileDialogForFFF.FileName = sourceFileName; saveFileDialogForFFF.Filter = "电子书文件(.fff)|*.fff"; if (saveFileDialogForFFF.ShowDialog() == DialogResult.OK) { dirFilePath = saveFileDialogForFFF.FileName; } string errorMessage = string.Empty; FileHelper.DownloadFileToLocal(sourceFile, dirFilePath, out errorMessage); if (!string.IsNullOrEmpty(errorMessage)) { MessageBox.Show(errorMessage); } else { MessageBox.Show("The file has been saved successfully"); } }
当打开SaveFileDialog控件时,文件名称的文本框中默认为原文件名称,也可以手动改写为其它名称,通过导向选择要保存的路径,点击确定按钮,服务器端的文件就会被保存到客户端相应的路径下!