所以我拥有过去几天一直在玩的代码集,我需要从服务器下载文件到客户端。这很简单,但我还需要在网格视图完成后刷新网格视图并显示已成功创建文件的警报,但我发现每个方式都可以下载包含一系列代码,这将是我的垮台。
到Response.End()
Response.Close()或
ApplicationInstance.CompleteRequest()
所有这些都结束了当前的响应,或者我相信在ApplicationInstance的情况下,它将页面的所有源代码刷新到我尝试下载的文本文件中。下面是我从服务器下载文件的代码片段,以下是下载文件的源代码。如果你有任何可以帮助解决这个永无止境的噩梦的事情,我们将不胜感激。
//I brought everything together in an arraylist to write to file.
asfinalLines = alLines.ToArray(typeof(string)) as string[];
string FilePath = HttpContext.Current.Server.MapPath("~/Temp/");
string FileName = "test.txt";
// Creates the file on server
File.WriteAllLines(FilePath + FileName, asfinalLines);
// Prompts user to save file
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
response.ContentType = "text/plain";
response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(FilePath + FileName);
response.Flush();
// Deletes the file on server
File.Delete(FilePath + FileName);
response.Close();
答案 0 :(得分:2)
方法1: 使用临时文件
如果您只想在文件传输后删除文件或执行其他一些清理操作,则可以执行此操作
// generate you file
// set FilePath and FileName variables
string stFile = FilePath + FileName;
try {
response.Clear();
response.ContentType = "text/plain";
response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
response.TransmitFile(stFile);
response.Flush();
} catch (Exception ex) {
// any error handling mechanism
} finally {
if (System.IO.File.Exists(stFile)) {
System.IO.File.Delete(stFile);
}
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
方法2: 不将文件保存到服务器
如果你的文本数据很小,那么你可以跟随另一个(不要使用这种方法进行大数据传输),你可以直接将上下文作为文本文件传递给客户端而不将它们保存到服务器上
try {
// assuming asFinalLines is a string variable
Response.Clear();
Response.ClearHeaders();
Response.AddHeader("Content-Length", asFinalLines.Length.ToString());
Response.ContentType = "text/plain";
response.AppendHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
Response.Write(asFinalLines);
response.Flush();
} catch (Exception ex) {
Debug.Print(asFinalLines);
} finally {
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
PS:我是VB.NET的人,试图在c#中转换上面的代码,它可能有一些区分大小写的问题,但逻辑很清晰
<强>更新强>
方法3: 使用文件传输执行其他代码。
必须记住,您不能对一个请求进行多次回复。您无法在单个响应中更新页面并传输文件。每个请求只能设置一次标题。
在这种情况下,您必须遵循以下方法:
此方法在生成后添加了下载文件的附加步骤,并且不支持直接数据传输,即不将其保存到服务器。