2014-02-28 42 views
2

我在使用SendGrid发送的电子邮件中附加了Windows Azure Blob存储中的Blob。我想指定附件的文件名(真实文件名称只是mumbo jumbo),afaik强制我将该附件添加为流。SendGrid:如何从Azure blob存储中附加文件?

我的代码如下所示:

var msg = SendGrid.GetInstance(); 
// Code for adding sender, recipient etc... 
var storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["storage"].ConnectionString); 
var blobClient = storageAccount.CreateCloudBlobClient(); 
var container = blobClient.GetContainerReference(typeName); 
var blob = container.GetBlockBlobReference("somefile.png"); 
var ms = new MemoryStream(); 
blob.DownloadToStream(ms); 
msg.AddAttachment(ms, "originalfilename.png"); 

该文件会从存储到内存流中读取并添加附件似乎做工精细,但收到电子邮件后的附加文件是0字节。

预先感谢您。

+0

在上周末我意识到这(很可能)是一个SendGrid相关的问题。将附件缓冲区的内容保存到文件中可以正常工作。我已经在SendGrid董事会上发布了这个消息,并希望任何人都能在此发现。 CopyTo和Write(缓冲区到缓冲区)产生相同的结果。附件缓冲区正确,但收到的文件不正确。 – HSBallina

回答

2

即使我不确定AddAttachment API是如何工作的,请注意您的MemoryStream的位置将在下载结束时设置为其长度。因此,在调用AddAttachment之前,您可能需要先查找它。

var ms = new MemoryStream(); 
blob.DownloadToStream(ms); 
ms.Position = 0; 
msg.AddAttachment(ms, "originalfilename.png"); 
+0

谢谢。已经尝试过这个。 – HSBallina

7

这有可能已经被解决了,但你必须确保你“倒带”流回来使用寻找的开始。下面的示例代码。

stream.Seek(0, SeekOrigin.Begin); 
sendGrid.AddAttachment(stream, "name"); 
+0

Thx。我们实际上通过链接到附件而不是发送它们来解决它。因此也节省了带宽:) – HSBallina

+0

不错。我的答案是否解决了您最初发布的问题?如果是这样,你能把它标记为答案吗? Thx :) – rod82

+0

如果我再次遇到这个问题,我会给它一个。不再在这个项目:( – HSBallina