C# 扩展性不是很好…你对第三方工具开放吗?我想你是在生成这个PDF文件吧?如果是这样的话,您应该能够将它直接从处理它的任何格式(例如iTextSharp)流式传输到响应中。我正在上载pdf文件并将其存储在数据库中,希望知道如何正确地存储和检索它们以便在我的视图

C# 扩展性不是很好…你对第三方工具开放吗?我想你是在生成这个PDF文件吧?如果是这样的话,您应该能够将它直接从处理它的任何格式(例如iTextSharp)流式传输到响应中。我正在上载pdf文件并将其存储在数据库中,希望知道如何正确地存储和检索它们以便在我的视图,c#,sql,asp.net-mvc-3,pdf,embed,C#,Sql,Asp.net Mvc 3,Pdf,Embed,扩展性不是很好…你对第三方工具开放吗?我想你是在生成这个PDF文件吧?如果是这样的话,您应该能够将它直接从处理它的任何格式(例如iTextSharp)流式传输到响应中。我正在上载pdf文件并将其存储在数据库中,希望知道如何正确地存储和检索它们以便在我的视图中显示,而不必将它们保存到文件系统中。在我的建议中,必须临时将它们保存到文件系统,这违背了拥有数据库的初衷。对于您回答的第一部分:这正是我想知道的方法。你知道我能读到什么好的资源来帮助我学习如何做到这一点吗?与其等待Javascript调用来发



扩展性不是很好…你对第三方工具开放吗?我想你是在生成这个PDF文件吧?如果是这样的话,您应该能够将它直接从处理它的任何格式(例如iTextSharp)流式传输到响应中。我正在上载pdf文件并将其存储在数据库中,希望知道如何正确地存储和检索它们以便在我的视图中显示,而不必将它们保存到文件系统中。在我的建议中,必须临时将它们保存到文件系统,这违背了拥有数据库的初衷。对于您回答的第一部分:这正是我想知道的方法。你知道我能读到什么好的资源来帮助我学习如何做到这一点吗?与其等待Javascript调用来发出文件删除的信号(顺便说一句,这确实不可靠),不如根据某个时间戳来删除文件,比如说一天之后,或者2小时之后?当然,此选项将需要一些预定任务来检查文件。@Amry同意Javascript解决方案可能不可靠,尽管它确实符合他的要求,如前所述。计划的任务会更可靠,但如果你要这样做,你最好使用PowerShell或DOS/VB/CMD类型的脚本,并使用任务调度程序(我发现,有时任务调度程序也不那么可靠)计划它运行。我不生成pdf。我正在从一个用户上传它。它被上传为文件,我想知道如何在视图中显示它,而不必将其保存到文件系统中,这样我就可以假定将其保存在数据库中并检索它以供以后显示,而不需要占用服务器空间或担心必须清理旧文件。@AaronPatten,如果一开始是作为文件上传的,为什么不将文件存储到可以通过URL访问的位置,然后将文件名存储在数据库中呢。这是一个更大的可扩展性,加上通常web服务器空间比数据库空间便宜得多。PDF是保密的,对于那些没有注册访问它们的人来说是不可访问的。你能告诉我一个资源,解释如何执行这三个步骤吗?我如何将其保存到http响应?一旦它出现在http响应中,如何在视图中显示它?如何以字节流格式从数据库获取它?在普通ASP.NET中,将内容类型设置为application/pdf后,将ByTestStream写入Response.OutputStream。响应代码可以在单独的页面或IFRAME中工作。PDF通常作为blob对象存储在数据库中。您需要首先检索该blob并从中创建ByTestStream。它还取决于您在数据库中存储PDF的方式。如果您已经编写了代码存储它,那么您将很容易知道如何提取它。我使用linq to sql,而解释对我来说没有意义。我也无法运行示例项目。有什么建议吗?我更新了我的答案,以说明我是如何将其应用于EF的。您可以使用Linq2Sql执行类似的操作,以便将数据块从数据库读入流中。问题的真正症结在于将其读入视图页面,而不将其放在服务器上的任何位置。我也会看看这个项目是如何做到这一点的,但是现在Scott的解决方案相对简单并且有效。我想这就是我想要的,但是我如何将这个pdf传递给嵌入代码呢?我只需将方法的路径和名称键入“/controller/method”,并将其放在嵌入代码的src”标记中即可。要在页面中嵌入PDF,需要2个
Action
方法。第一个将返回一个正常的
视图
,其中包含
代码,
src
标记将指向第二个
GetPdf
操作,就像它是一个实际的PDF文件一样。我没有该方法的任何依赖性,我的编译器甚至不理解语法。我正在使用asp.net mvc3,这可能是个问题吗?我应该如何构造自己的getPDF方法;需要什么?是否需要返回HttpPostedFileBase类型的对象?错误3找不到类型或命名空间名称“ContentDisposition”(是否缺少using指令或程序集引用?)C:\Users\Aaron Patten\Documents\Visual Studio 2010\Projects\MyApp\MyApp\Controllers\MyController.cs 17 16 MyAppThe
PdfResult
类使用
ContentDisposition
类,该类需要对
System.Net.Mime
的引用。抱歉,为了简洁起见,代码中缺少该部分。我把整个都放进去了,看一看。
public override int Read(byte[] buffer, int offset, int count)
{
    result = _attachments.ExecuteStoreQuery<byte[]>(
             "SELECT SUBSTRING(AttachmentBytes, " + position.ToString() +
             ", " + count.ToString() + ") FROM Attachments WHERE Id = {0}",
             id).First();

    var bytesRead = result.Length;
    Buffer.BlockCopy(result, 0, buffer, 0, bytesRead);

    position += bytesRead;
    return (int)bytesRead;
}
// Get the page's output stream ready Response.Clear(); Response.BufferOutput = true; // Make the browser display the forms document // using a PDF plug-in. (If no plug in is available, // the browser will show the File -> Save As dialog box. Response.ContentType = "application/pdf"; // Write the forms document to the browser doc.Save(Response.OutputStream); doc.Close(); doc.Dispose();
public ActionResult ShowPdf() {
    // Note: the view should contain a tag like <embed src='MyController/GetPdf'>
    return View(); 
}

public ActionResult GetPdf() {
    byte[] pdfBytes = dataRepo.GetPdf(...);
    return new PdfResult(pdfBytes, "Filename.pdf", false) ;
}