我有一个很好的任务,就是如何处理大型文件被加载到我们应用程序的脚本编辑器中(就像我们用于快速宏的内部产品的VBA一样).大多数文件大约300-400 KB,这是很好的加载.但是当它们超过100 MB时,这个过程很难(正如你所期望的那样).
发生的事情是将文件读取并推入RichTextBox然后导航 - 不要过于担心这部分.
编写初始代码的开发人员只是使用StreamReader并且正在执行
[Reader].ReadToEnd()
Run Code Online (Sandbox Code Playgroud)
这可能需要很长时间才能完成.
我的任务是打破这段代码,将其以块的形式读入缓冲区并显示一个带有取消选项的进度条.
一些假设:
现在提问:
这些(在您的专业意见中)是好主意吗?我过去曾经有一些问题从Streams读取内容,因为它总会错过最后几个字节或者其他东西,但如果是这样的话,我会问另一个问题.
好的,所以我有一个生成PDF并将其返回给浏览器的动作方法.问题是,IE不会自动打开PDF,而是显示下载提示,即使它知道它是什么类型的文件.Chrome做同样的事情.在这两种浏览器中,如果我单击指向存储在服务器上的PDF文件的链接,它将打开正常,并且永远不会显示下载提示.
以下是调用以返回PDF的代码:
public FileResult Report(int id)
{
var customer = customersRepository.GetCustomer(id);
if (customer != null)
{
return File(RenderPDF(this.ControllerContext, "~/Views/Forms/Report.aspx", customer), "application/pdf", "Report - Customer # " + id.ToString() + ".pdf");
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
这是服务器的响应头:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 16 Sep 2010 06:14:13 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 2.0
Content-Disposition: attachment; filename="Report - Customer # 60.pdf"
Cache-Control: private, s-maxage=0
Content-Type: application/pdf
Content-Length: 79244
Connection: Close
Run Code Online (Sandbox Code Playgroud)
我是否必须在响应中添加一些特殊内容才能让浏览器自动打开PDF?
任何帮助是极大的赞赏!谢谢!
出于某些奇怪的原因,我想从控制器操作直接将HTML写入Response流.(我理解MVC分离,但这是一个特例.)
我可以直接写入HttpResponse流吗?在这种情况下,IView控制器操作应该返回哪个对象?我可以退回'null'吗?
假设我想定义一个使用Path.GetTempFileName()方法创建临时文件的TempFileStream类.当不再需要TempFileStream的对象时,必须删除临时文件,例如关闭或处置:
class TempFileStream: FileStream
{
string m_TempFileName = Path.GetTempFileName();
public TempFileStream(FileMode fileMode): base(m_TempFileName,fileMode) {}
/// ...
public ovverride Dispose(bool disposing)
{
/// ???
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何简单安全地实现这一目标?
asp.net-mvc ×2
c# ×2
stream ×2
.net ×1
dispose ×1
filestream ×1
large-files ×1
pdf ×1
streamreader ×1