因客户的要求,要把Web服务器上的Excel文件导出到客户机上,但客户又不想自己选保存路径:(,于是只好做了一个ClickOnce程序,发布到Web服务器上,在客户导出文件时,将文件保存到客户机上的默认位置(当然这个位置是写死在程序里的),以达到用户不用选择保存路径的目的。
制做起来很简单,一个简单的WinForm程序,界面上有几个Lable用来向用户提示文件保存在哪个文件夹下以及文件的名称,一个Button,用来关闭WinForm窗体。以下为原码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Net;
using System.Collections.Specialized;
using System.Deployment.Application;
using System.Web;
namespace GZDownload
...{
public partial class GZDownload : Form
...{
public GZDownload()
...{
InitializeComponent();
try
...{
NameValueCollection nameValueTable = GetQueryStringParameters();
string fielName = nameValueTable.Get("fileName");
string uri = nameValueTable.Get("uri");
string dir = nameValueTable.Get("dir");
string path = @"D:" + dir;
string outName = nameValueTable.Get("outName");
System.IO.Directory.CreateDirectory(path);
WebClient myWebClient = new WebClient();
myWebClient.DownloadFile(uri + fielName, path + @"" + outName);
this.lbl_dirvalue.Text = path;
this.lbl_file.Text = outName;
}
catch
...{
this.lbl_message.Text = "下载时发生不可预知错误!";
}
}

/**//// <summary>
/// 取得参数集合
/// </summary>
/// <returns>参数集合</returns>
private NameValueCollection GetQueryStringParameters()
...{
NameValueCollection nameValueTable = new NameValueCollection();
if (ApplicationDeployment.IsNetworkDeployed)
...{
string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;
nameValueTable = HttpUtility.ParseQueryString(queryString);
}
return (nameValueTable);
}
private void btn_ok_Click(object sender, EventArgs e)
...{
this.Close();
}
}
}这里有一点值得注意,通过URL传递参数时,用到了
string queryString = ApplicationDeployment.CurrentDeployment.ActivationUri.Query;以获取当前页面传递过来的带参数的URL,如果在布署没有进行正确的设置,那么这名代码得到的结果会为空值。为了使这段代码能正确的传递我们要的各参数,则需要:项目属性--发布--选项,将允许给应用程序传递URL参数选上(默认为不选)。
OK,现在参数就能正确传递了,工作到这里也就基本结束。
本文介绍了一种使用ClickOnce程序实现在Web服务器上自动导出Excel文件至客户端的方法,并详细展示了如何通过URL传递参数实现文件的自动下载及保存。
1440

被折叠的 条评论
为什么被折叠?



