2009-08-22 3 views
16

PDF 생성기를 사용하여 파일을 사용자에게 보내는 프로젝트가 있습니다. 사용자에게 대신이 파일을 이메일에 첨부 할 수있는 옵션을 제공하고 싶습니다. 그리고 Stream 객체와 첨부 논리를 함께 사용하는 데 문제가 있습니다.System.Net.Mail에 대한 첨부 파일 스트림이 0 바이트입니다.

두 가지 저장 방법이있는 ABCpdf로 시작합니다. 스트림에 저장할 수 있습니다. 또는 문자열을 지정하면 디스크의 파일로 저장하려고 시도합니다. 우리는 두 가지 문제를 모두 해결했습니다. stream 데이터의 몇 킬로바이트가 있고 .Save() 파일에, 당신은 동일한 수의 바이트로 실제 파일을 얻을 -

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

모든 것이이 시점에서 대부분 멋지다. 이메일을 수신으로까지 우리를 얻을 수

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

을 ... :

그래서 우리는 (: 및 :, 등등에서에 설정, 메일 객체를 초기화 한 후)이 시점에서 이메일에 첨부 0 바이트이지만 적절한 파일 이름.

모든 예제에서는 온라인에서 StreamReader 또는 StreamWriter 또는 Flush() 등을 사용하고 있습니다. 스트림을 전달하는 것보다 더 복잡한 것처럼 보이지만 한 두 줄만 복잡해집니다. 이 예제들은 Stream으로 시작하지 않습니다. 항상 배열을 스트림으로 변환하여 디스크가 얼마나 쉬운지를 보여 주거나 디스크에서 파일을 가져 오려고합니다 (우리는 할 수 없기 때문에 흥분됩니다). 스트림 사용).

어쨌든 누구나 내가 잘못하고있는 일이나 내가해야 할 일을 설명 할 수 있다면 정말 고맙겠습니다. 감사.

+0

을 보내기 전에, 내 첨부 파일은 64 바이트했지만 개방에 파일이 유효했다. 아래 해결 방법도이 문제를 해결하여 0 바이트 라고만 표시하는 것이 아닙니다. –

답변

35

추측 ... 처음으로 백업을 날엔 스트림의 경우 니트

// 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;"을 사용하는 것이 좋습니다. 스트림을 되 감는 더 간단한 방법입니다. 그것들은 동일하지만,'Position'은 더 읽기 쉽습니다. IMO :) –

-1

파일을 저장하고 스트림 첨부를 시도하지 않고 파일에 첨부 해 보았습니까?

여기에 정상적인 프로세스가

  • 삭제

    1. 이메일에 파일을 첨부 디스크

    2. 에서 파일을 생성하기 위해 스트림을 사용 것

      추가 파일이 끝나면 이 사람을 도움이

  • +0

    디스크에 저장하는 것은 옵션이 아닙니다. 다른 곳에서 "절약"할 생각인가요? 스트림을 byte [] 또는 뭔가로 변환하고 다시 읽는가? – dnord

    +0

    확인. 디스크에 저장하는 것이 옵션이 아니라면, 나는 사과한다. 나의 게시물은 도움이되지 않을 것이다. 이메일에 스트림을 첨부 해본 적이 한번도 없었습니다. 다른 사람들이 게시하는 내용을 확인하기 위해 다시 확인해 보겠습니다. 일반적으로 수행하는 것처럼 임시 파일을 만드는 것보다는 삭제하는 것이 더 낫다고 생각하기 때문입니다. – David