2009-08-22 11 views
16

私はPDF生成プログラムを使用してユーザーにファイルを送信するプロジェクトがあります。代わりにこのファイルを電子メールに添付するオプションをユーザに与えたいと思います。私たちはStreamオブジェクトとAttachmentロジックを一緒に使用することに問題があります。System.Net.Mailへの添付ファイルとしてのストリームは0バイトです

まず、ABCpdfには2つの保存メソッドがあります。ストリームに保存するか、文字列を指定すると、ディスク上のファイルに保存しようとします。私たちはどちらも問題なかった。 streamは、データの数キロバイトを持っており、あなた.SAVE()ファイルへの場合は、同じバイト数と実際のファイルを取得 -

Stream stream = new MemoryStream(); 
myPdf.Save(stream); 

すべては、この時点では、主にクールです。

だから我々は(への設定、メールオブジェクトを初期化した後:と:などから):この時点で、メールに添付し

mail.Attachments.Add(new Attachment(stream, "myPdf.pdf")); 
mail.Send(); 

...限り電子メールを受け取るように私たちを取得します0バイトで、しかし適切なファイル名で。

私がオンラインで探しているすべての例では、StreamReaderまたはStreamWriterまたはFlush()などを使用しています。ストリームを渡すよりも複雑なように思えますが、1行または2行だけ複雑になることもあります。これらの例はどれもStreamから始まっていません。アレイをStreamに変えて、どれくらい簡単かを示したり、ディスクからファイルを取得しようとしています(これはできません。ストリームを使用する)。

とにかく、誰かが私が間違っていることや私がやっているべきことを説明できるなら、本当に感謝します。ありがとう。

+0

を送信する前に、私の添付ファイルは64のバイトでしたが開くと、それはファイルが無効であると言いました。 以下の解決法もこれを修正したので、単に0バイトと言うだけではありません。 –

答えて

35

推測...初めまで戻るDATストリームの場合NIT

// Set the position to the beginning of the stream. 
stream.Seek(0, SeekOrigin.Begin); 
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf")); 
mail.Send(); 
+0

私はそれを試すことを意味していた - 私はそれを撃つだろう。ありがとう。 – dnord

+0

それは問題であるはずです。あなたやあなたのPDF APIがバッファリングされたストリームを使用している場合を除きます。仮定しないでください。最後の瞬間にストリームのタイプを確認してください。 – Will

+3

「stream.Position = 0;」を使用することをおすすめします。ストリームを巻き戻す簡単な方法です。彼らは同等ですが、 '位置'はより読みやすくIMOです:) –

-1

ファイルを保存してからファイルを添付しようとしましたが、ストリームを添付しようとしましたか?

は、ここでは通常のプロセスが

  • 削除

    1. は、電子メールにファイルを添付ディスク

    2. 上のファイルを作成するには、ストリームを使っだろう

      を追加しましたそのファイルはそれで完了します。それは誰にも役立ちます

  • +0

    ディスクに保存することはできません。他のどこかで "貯蓄"を考えていますか?ストリームをbyte []などに変換して読み返していますか? – dnord

    +0

    OK。ディスクへの保存がオプションでない場合、私は謝罪し、私の投稿は完全に役に立たないでしょう。私は電子メールにストリームを添付しようとしたことはありません。私は通常のように一時ファイルを作成して削除するよりも良いと思うので、他の人が投稿した内容を確認するためにチェックします。 – David

    関連する問題