0

ユーザーがコンピューターと携帯電話の両方でさまざまな種類の PDF を生成できる PDF Web アプリを作成しました。ただし、ローカルホストでプログラムを実行しています。これが、コンピューターのファイルディレクトリに基づいて PDF を保存する方法です。

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

ただし、webapp を azure に公開すると、コンピューターと携帯電話の両方からダウンロードできませんでした。したがって、デフォルトのファイルディレクトリが原因である可能性があると思います。

したがって、すべてのコンピューターと携帯電話のデフォルトのファイル ディレクトリを作成する方法を教えてください。

それとも、webapp をオンラインで公開するときに必要なものを省略したのでしょうか。

ありがとう。

PS : デフォルトのファイル パスをハードコーディングして、localhost でアプリケーションをテストし、完全な動作状態を確保しました。したがって、すべてのモバイル/コンピューター ユーザーが 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 に答える