0

ユーザーがボタンを押すと、サーバーにサービス呼び出しを行うフレックス 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");。ページのサーバーを何かに設定する手順がありませんか、それともサーバー パスを取得する別の方法がありますか?

4

1 に答える 1

1

デバッガーを使用して Web アプリをローカルで実行すると、独自の資格情報を使用してオペレーティング システムに対して識別されます。その後、サーバーに展開すると、アプリケーション プールが実行するように設定されている ID (通常はネットワーク サービスまたは IIS_USR) の下で実行されます。これらのユーザーはいずれも c:/Temp/ フォルダーにアクセスできないため、例外が発生します。フォルダーのアクセス許可を変更するか (共有の一時フォルダーではなく、Web アプリケーション独自のフォルダー内に保存することをお勧めします)、データベースの varbinary フィールドなどの別の場所に保存します。

于 2013-05-30T13:41:03.117 に答える