将.txt文件发送到客户端c#

时间:2017-03-15 14:40:59

标签: c# httpresponse

我正在努力从服务器获取文件并允许用户下载它。在我的机器上,我只是打开它,但由于它已经投入生产,这似乎不是一个有效的解决方案。

public HttpResponseMessage Post([FromBody]string[] info)
{
    HttpResponseMessage resp = new HttpResponseMessage();
    string html = info[0];
    _file += info[2] + @"\media\";

    try
    {                
        using (StreamWriter sw = File.CreateText(_file))
        {
            for (int n = 0; n <= str.Length; n = n + 2)
            {.WriteLine(str[n]);
            }
        }
        do
        {
            string notepadPath = Environment.SystemDirectory + "\\notepad.exe";

            var startInfo = new ProcessStartInfo(notepadPath)
            {
                WindowStyle = ProcessWindowStyle.Maximized,
                Arguments = _file
            };

            Process.Start(startInfo);
            break;
        } while (true);
    }
    catch (Exception ex)
    {
        //handled
    }

    return resp;
}

我试图实现像this之类的东西,但我无法将其配置为甚至构建。如果这真的是最好的路线,有人可以详细解释它以及如何去做吗?

3 个答案:

答案 0 :(得分:0)

在制作中,您无法在Web服务器上启动NotePad.exe进程,并希望任何人都能够访问它。

Web服务器唯一能做的就是使用content-disposition: attachment; filename=something.txt在HTTP响应中发出文件,并希望客户端将NotePad.exe映射到正确的内容类型/扩展名。

答案 1 :(得分:0)

这对我来说使用MVC 5.希望它也适合你! :)请记住,客户端计算机需要自己决定如何处理文件 - 您真的没有任何控制权来启动客户端计算机上的进程。沿着这条路走下去就是完全的HTTP无政府状态。

如果您正在动态创建文本文件,只需使用System.Text.Encoding.UTF8.GetBytes(yourStringHere)即可完全不创建文件 - 保存自己一些磁盘IO和所有......

    public void DownloadTest()
    {
        var filePath = @"c:\code\testFile.txt";
        var reader = new StreamReader(filePath);
        var data = reader.ReadToEnd();
        var dataBinary = System.Text.Encoding.UTF8.GetBytes(data);

        Response.ContentType = "text/plain";
        Response.AddHeader("content-disposition", "attachment; filename=data.txt");

        Response.BinaryWrite(dataBinary);
    }

答案 2 :(得分:0)

根据您的意见,以下内容应该:

public HttpResponseMessage Post([FromBody]string[] info)
{
    // create your file on the fly.
    var txtBuilder = new StringBuilder();
    for(int n = 0; n <= str.Length; n = n + 2)
    {
        txtBuilder.AppendLine(str[n]);
    }

    // make it as a stream
    var txtContent = txtBuilder.ToString();
    var txtStream = new MemoryStream(Encoding.UTF8.GetBytes(txtContent));

    // create the response and returns it
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StreamContent(txtStream);
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/plain");
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = info[0] // Not sure about that part. You can change to "text.txt" to try
    };

    return result;
}

我不确定如何获取文件名以及它是什么类型的扩展名,但您可以修改FileName以及Mime类型以完成您的需要。