Pergunta

Espero que esta é uma pergunta rápida, eu espero. Eu preciso escrever alguns relatórios e, em seguida, ter o usuário será solicitado a salvá-lo em sua máquina ela / local. A última vez que fiz isso eu escrevi um arquivo para o servidor web e, em seguida, enviá-lo para o cliente via objeto Response.

para criar no servidor web

            TextWriter tw = new StreamWriter(filePath);

para enviar para o cliente

           page.Response.WriteFile(path);

A pergunta é: Existe uma maneira de ignorar a escrita do arquivo físico para o servidor web e vá para a direita de um objeto que representa o documento para a resposta?

Foi útil?

Solução

Você pode usar o Response.ContentType como este

Response.ContentType = "text/plain";
Response.OutputStream.Write(buffer, 0, buffer.Length);
Response.AddHeader("Content-Disposition", "attachment;filename=yourfile.txt");

Isto, obviamente, funciona se você quer escrever um arquivo de texto. No caso de você querer escrever uma .doc, por exemplo, você alterar o ContentType para "application / msword" etc ...

Outras dicas

Você pode.

Tente isto:

Table oTable = new Table();
//Add data to table.

Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment;filename="test.xls"");
Response.Charset = "";
this.EnableViewState = false;
System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.Html32TextWriter oHtmlTextWriter = new System.Web.UI.Html32TextWriter(oStringWriter);
0Table.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();

Isto vai dar solicitar que o usuário arquivo test.xls abrir ou salvar. Da mesma forma você pode fornecer outras ASP.NET objetos no lugar da tabela.

Sim.

page.Response.WriteFile(yourData, 0, yourData.Length);

A resposta exata para a pergunta depende de como você ter o seu relatório organizado (ou seja, o que é o "objeto" você está se referindo). Se você tem uma única seqüência, você pode usar Response.Write apenas para escrevê-lo. Se você precisa de um TextWriter, Response.Output é o que você quer - de que maneira você pode pular escrito para o disco e, em seguida, usando WriteFile. Além disso, se o seu conteúdo passou a ser binário, você poderia usar Response.OutputStream para isso.

Você também pode querer definir Response.AddHeader ( "Content-Disposition", "attachment"), se você deseja que o usuário veja uma gravação de diálogo de arquivo. No entanto, Content-Disposition não é necessariamente honrado, assim o usuário ainda pode obter o relatório abertos diretamente no navegador. Lembre-se de cabeçalhos definidos antes de emitir o conteúdo real!

Além disso, dependendo do formato do relatório, você pode querer set Response.ContentType a algo apropriado, como text / plain, text / csv ou o que quer que você tem. Os tipos MIME corretos estão listados no o site IANA .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top