0

我创建了一个 PDF webapp,用户可以在电脑和手机上生成各种类型的 PDF。但是,我在本地主机上运行我的程序,这就是我根据计算机的文件目录保存 PDF 的方式

var output = new FileStream(Path.Combine("C:\\Users\\apr13mpsip\\Downloads", filename), FileMode.Create);

但是,当我将我的 webapp 发布到 azure 上时,我无法从我的电脑和手机上下载。因此我相信这可能是由于我的默认文件目录。

因此我想问一下如何为所有计算机和手机做一个默认文件目录?

或者是我遗漏了 webapp 在线发布时所必需的东西

谢谢。

PS:我硬编码了一个默认文件路径,以便我在本地主机上测试我的应用程序,以确保完美的工作条件。因此,当所有移动/计算机用户尝试下载 PDF 而不是我通常的硬编码文件路径时,我正在寻找一种方法来为所有移动/计算机用户找到默认的公共文件目录

更新

我尝试使用方法 Server.MapPath 但收到一些错误。

var doc1 = new Document();
        var filename = Server.MapPath("~/pdf") + "MyTestPDF" + DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".pdf";
       // var output = new FileStream(Path.Combine("C:\\Users\\apr13mpsip\\Downloads", filename), FileMode.Create);

        //iTextSharp.text.pdf.PdfWriter.GetInstance(doc1, output);

        using (var output = File.Create(filename))
        {
            iTextSharp.text.pdf.PdfWriter.GetInstance(doc1, output);
        }


        doc1.Open();

这是我收到的错误

ObjectDisposedException was unhandled by user code
Cannot access a closed file.
4

1 回答 1

1

当你编写一个 Web 应用程序时,你永远不会使用硬编码的路径,你应该保存文件的最后一个地方是C:\Users!! 这是否是 Azure 并不重要。这是任何类型的 Web 应用程序的一般规则!

在您的情况下,我建议您在应用程序中创建一个名为pdf或类似名称的文件夹,并使用以下代码将文件保存在那里:

var fileName = Server.MapPath("~/pdf") + filename;
using (var output = File.Create(fileName) )
{
 // do what you want with that stream
 // usually generate the file and send to the end user
}

但是,还有更有效的方法。使用Response.OutputStream并将生成的 PDF 直接写入响应。将为您节省大量本地服务器上的空间,以及删除未使用的生成文件的逻辑。

于 2013-07-09T07:51:58.200 回答