代码之家  ›  专栏  ›  技术社区  ›  user4546142

将PDF从Cloudinary转换为邮件附件将MemoryStream转换为Stream

  •  0
  • user4546142  · 技术社区  · 7 年前

    Cloudinary System.Net.Mail Attachment :

     private static Attachment CreateAttachementFromMessage(Stream stream)
            {
                var memoryStream = new MemoryStream();
                stream.CopyTo(memoryStream);
    
                return new Attachment(
                    memoryStream,
                    "Anhang zur Bestellung",
                    "application/pdf"
                    );
            }
    

    var stream = getFileStream(resourceId);
    private getFileStream(resourceId){
    
                    var imageData=_cloudinary.GetResource(resourceId);
    
                    if (imageData.StatusCode != HttpStatusCode.OK)
                    {
                        return null;
                    }
    
                    var downloadUrl = _cloudinary.Api.UrlImgUp.Secure().BuildUrl(resourceId);
    
                    if (string.IsNullOrEmpty(downloadUrl))
                    {
                        return null;
                    }
    
                    return DownloadStream(new Uri(downloadUrl));}
    
    
    }
    

    流不是空的,但邮件内容本身似乎无效。

    有什么想法吗?创建流、转换流或创建附件是否有问题?

    https://i.stack.imgur.com/IveNn.png

    编辑2:实际附件内容:

    https://i.stack.imgur.com/x85AO.png

    1 回复  |  直到 7 年前
        1
  •  0
  •   user4546142 user4546142    7 年前

    通过base64进行转换,效果良好:

    using (BinaryReader b = new BinaryReader(stream))
                        {
                            byte[] binData = b.ReadBytes((int) stream.Length);
                            String result = Convert.ToBase64String(binData);
    
                            var decodedFile = Convert.FromBase64String(result);
    
                            var mediaType = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Image.Jpeg).MediaType;
    
                            return new Attachment(
                                new MemoryStream(decodedFile),
                                $"Anhang zur Bestellung.{mediaType}",
                                mediaType
                            );
    

    似乎有点不必要但是方法 stream.CopyTo() 它不为我工作