【问题标题】:Sending a file to desktop application (client) from ASP.NET从 ASP.NET 向桌面应用程序(客户端)发送文件
【发布时间】:2015-01-05 17:53:58
【问题描述】:

我正在为桌面应用程序开发许可。一个简单的工作流程:

  1. 用户的详细信息通过 HttpPost 方法提交到服务器(或其他)
  2. 服务器检查详细信息并生成文件。
  3. 服务器向用户发送文件(作为确认)

我需要关于第 3 步的帮助 - 如何向用户发送文件?

例如用户(HttpPost)

var client = new HttpClient();

var pairs = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("serialNumber", "AAAA"),
    new KeyValuePair<string, string>("email", "test@123"),
    new KeyValuePair<string, string>("HWID", "AAAA-BBBB-CCCC-DDDD"),
};

var content = new FormUrlEncodedContent(pairs);

var response = client.PostAsync("https://localhost:44302/testCom.aspx", content).Result;

if (response.IsSuccessStatusCode)
{
    //Code for file receiving?

}

服务器

protected void Page_Load(object sender, EventArgs e)
{
            //Check license ID

            //Issue license file - How to?

            //Mark database
}

【问题讨论】:

  • 对于那种场景,你要实现Web Service (如Web API)而不是ASP.Net Web Form .
  • 向我们展示您已经尝试过的东西总是很好的。我希望互联网上会有一些教程......

标签: c# asp.net httprequest httpresponse


【解决方案1】:

您可以使用 Response 类将文件发送回客户端

 Response.Clear();
 Response.ClearHeaders();
 Response.ClearContent();
 Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
 Response.AddHeader("Content-Length", file.Length.ToString());
 Response.ContentType = "text/plain";
 Response.Flush();
 Response.TransmitFile(file.FullName);
 Response.End();

【讨论】:

  • 注意您的 MIME 类型 - 我看到 IIS 在使用不受支持的类型时不会提供文件而不抛出错误。
  • 如果我错了,请纠正我,但这是针对从桌面应用程序创建的响应,即发送数据对的应用程序。我需要服务器用一个文件来响应这个请求。
【解决方案2】:
private void sendFile(string path, string fileName)
{
    FileStream fs = new FileStream(path, FileMode.Open);
    streamFileToUser(fs, fileName);
    fs.Close();
}

private void streamFileToUser(Stream str, string fileName)
{
    byte[] buf = new byte[str.Length];  //declare arraysize
    str.Read(buf, 0, buf.Length);

    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
    HttpContext.Current.Response.AddHeader("Content-Length", str.Length.ToString());
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.OutputStream.Write(buf, 0, buf.Length);
    HttpContext.Current.Response.End();
}

【讨论】:

  • 看起来不错。在应用程序端处理传入流的最佳方法是什么?
  • 发送请求时只需使用相同的 HttpRequest/Response/WebClient 代码来检索文件!阅读回复。 stackoverflow.com/questions/4088625/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 2015-09-04
  • 1970-01-01
  • 2012-10-27
  • 2014-03-01
相关资源
最近更新 更多