如何通过将文件从HttpPostedFileBase复制到MemoryStream来将文件附加到电子邮件?

问题描述 投票:0回答:1

我正在尝试将文件附加到电子邮件,但在postFile.InputStream中到达MemoryStream的方法CopyTo时,出现此错误。

StackTrace = " at System.IO.__Error.FileNotOpen()\r\n at System.IO.FileStream.Seek(Int64 offset, SeekOrigin origin)\r\n at System.IO.Stream.InternalCopyTo(Stream destination, Int32 bufferSize)\r\n at Test.Web.Extensions.EpiserverForms

                {
                    HttpPostedFileBase postedFile = this.HttpRequestContext.Files[i];
                    postedFile.InputStream.Position = 0;
                    postedFile.InputStream.Seek(0, SeekOrigin.Begin);

                    using (MemoryStream memoryStream = new MemoryStream())
                    {
                        postedFile.InputStream.CopyTo(memoryStream);
                        memoryStream.Position = 0;
                        memoryStream.Seek(0, SeekOrigin.Begin);

                        uploadedFiles.Add(
                            new UploadedFile()
                            {
                                Name = postedFile.FileName,
                                Type = MimeMapping.GetMimeMapping(postedFile.FileName),
                                InputStream = memoryStream
                            });
                    }
                }```
c# asp.net-mvc episerver episerver-forms
1个回答
0
投票

尝试使类属性为UploadedFile.InputBytes-字节,而不是流。然后,您可以按如下所示重新分发文件:

    using (var memoryStream = postedFile.InputStream as MemoryStream)
    {
        if (memoryStream == null)
            postedFile.InputStream.CopyTo(memoryStream);

        new UploadedFile()
        {
            Name = postedFile.FileName,
            Type = MimeMapping.GetMimeMapping(postedFile.FileName),
            InputBytes = memoryStream?.ToArray()
        };
    }
© www.soinside.com 2019 - 2024. All rights reserved.