在服务器上为动态生成的文件创建下载URL

时间:2013-05-30 13:36:47

标签: c# flex dynamic download

我有一个flex web应用程序,当用户按下按钮时,会向服务器发出服务调用。在服务调用中,将创建一个自定义导出器对象,并在该对象中使用iTextSharp生成PDF文件。我希望能够在该服务调用中为文件位置生成一个url,并将其传递回flex应用程序以与FileReference.download()一起使用。服务调用只是从传递给函数的id获取保存PDF所需数据的对象,创建导出器对象并发回文件路径。在导出器对象的导出函数中,它看起来像这样:

        this.ObjectId = object.Id;
        Document doc = new Document();
        PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream("C:/temp/TestBoth.pdf", FileMode.Create));
        MyPageEventHandler e = new MyPageEventHandler(this.ObjectId);
        writer.PageEvent = e;
        doc.Open();
        this.ExportThingOne(object, true, doc, writer);
        doc.NewPage();
        this.ExportThingTwo(object, true, doc);

        doc.Close();

        System.Web.UI.Page page = new System.Web.UI.Page();
        string serverPath = page.Server.MapPath("C:/temp/TestBoth.pdf");
        return serverPath;

该文件在我的本地机器上的C:/temp/TestBoth.pdf上完美生成(在推送到实际服务器之前只在本地测试),但是当我尝试page.Server.MapPath("C:/temp/TestBoth.pdf");时,我会抛出异常。我是否错过了将页面服务器设置为某个内容的步骤,还是有另一种方法来获取服务器路径?

1 个答案:

答案 0 :(得分:1)

使用调试器在本地运行Web应用程序时,您将使用自己的凭据来识别操作系统。然后,当您将其部署到服务器时,它将以您的应用程序池设置为运行的任何标识运行 - 通常是网络服务或IIS_USR。这些用户都无权访问c:/ Temp /文件夹,这就是您获得异常的原因。更改文件夹权限(最好保存在Web应用程序自己的文件夹而不是共享临时文件夹中)或保存到其他位置,例如数据库中的varbinary字段。