2014-09-18 42 views
0

我有一个ASP.NET web api应用程序使用JavaScript来打开服务器上的PDF文件的链接。打开后,我从服务器上删除文件。使用Firefox,Safari和IE浏览器即使在文件被删除后,我也能够在浏览器上看到文件。当我在Chrome中运行该功能时,我看不到任何文件并显示404错误。我怎样才能让这个功能在Chrome中运行呢?铬 - 如何显示从服务器的PDF文件,并在浏览器显示文件后从服务器删除

put方法在C#中删除PDF

public void Put([FromBody]string filepath) 
    { 
     string pdfGUID_DIR = filepath.Split('/')[0]; //get the first part of the dir which is the folder name (GUID value) 
     string tempDir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, System.Configuration.ConfigurationManager.AppSettings["TemporaryDirectoryParent"], pdfGUID_DIR + @"\"); 

     try 
     { 
      Directory.Delete(tempDir, true); 
     } 
     catch (IOException) 
     { 
      Directory.Delete(tempDir, true); 
     } 
     catch (UnauthorizedAccessException) 
     { 
      Directory.Delete(tempDir, true); 
     } 
    } 

JS代码来打开PDF

window.open('/Report/' + pdfURL); //Link to PDF file on server 
setTimeout(removePDF(pdfURL), 1000); 

JS功能的AJAX调用删除PDF

function removePDF(pdfURL) { 
     $.ajax({ 
      url: '/api/pdf', 
      type: 'PUT', 
      data: "=" + pdfURL, 
     }); 

    } 
+0

为什么从客户端发送删除方法?您可以将文件“提供”给客户端,然后对文件进行处理(重命名或删除) - 服务器端即 – Leon 2014-09-18 18:49:43

+0

Hi Leon,感谢您的回复。看来我的超时延迟设置得太低了。我现在看到该文件,并在超时后它会在超时触发时删除。但是,针对您的评论,如何在我提供该文件后删除该文件?我不想将文件保存在服务器上。我正在使用pdf生成器(wkhtmltopdf)将文件保存在服务器上,然后将文件提供给客户端。 – Vahe 2014-09-18 18:53:37

+0

不要只依赖计时器。互联网连接速度慢的人都会遇到问题。 (这不只是铬)..我不知道*你怎么实际上服务的文件,但我在这里创建一个实际的响应...使用MVC – Leon 2014-09-18 18:56:38

回答

0

如果你不使用MVC(即使你是,但你需要改变的ActionResult)。 发布该文件作为回应,您发布它,只需转储它。

Response.ContentType = "application/pdf" 
Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename)); 
Response.WriteFile(fullpath); 
Response.End(); 

    // dump file here: like 
System.IO.File.Delete(fullpath); 
+0

>试试这个答案:http:// stackoverflow。 com/questions/3604562 /下载文件的任何类型在asp-net-mvc-using-fileresult – Leon 2014-09-18 19:06:15

+0

谢谢莱昂。在Controller中的Post方法中,我当前运行一个名为Wkhtmltopdf.exe的可执行文件。它在服务器文件夹上创建pdf。然后我从Controller返回PDF文件位置,并让我的JS函数在可从浏览器访问的目录上打开创建的文件。我会尝试你提供的方法。 – Vahe 2014-09-18 19:06:42

相关问题