路径中的非法字符

时间:2010-11-03 10:56:07

标签: c# .net asp.net

尝试上传word文档,然后将其附加到已发送的电子邮件中。

目前正在获取IO异常 - 路径中存在非法字符。

这是代码:

try
{
    var fileName = Path.Combine(Server.MapPath("/"), ResumeUpload.FileName);

    ResumeUpload.SaveAs(fileName);

    using (var resumeContent = new StreamReader(fileName))
    {
        while (!resumeContent.EndOfStream)
        {
            var emailAttachement = new Attachment(resumeContent.ReadToEnd());
            message.Attachments.Add(emailAttachement);
        }
    }

    var client = new SmtpClient();
    client.Send(message);
}
catch(Exception exception)
{
    // Handle exception...
}

目前,fileName变量设置为:

d:\网站\ websitename \ website.com.au \家\ filename.docx

为什么会破坏这个想法?

这是例外

Illegal characters in path.   at System.IO.Path.CheckInvalidPathChars(String path)
  at System.IO.Path.GetFileName(String path)
  at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
  at System.Net.Mail.AttachmentBase.SetContentFromFile(String fileName, String mediaType)
  at System.Net.Mail.Attachment..ctor(String fileName)
  at JobApplication.JobApplication.SendEmail(StringBuilder emailText)

4 个答案:

答案 0 :(得分:4)

Attachment(string)接受该路径的字符串。 StreamReader.ReadToEnd返回字符串内容。我怀疑你只是想要:

Attachment emailAttachement = new Attachment(filename);
message.Attachments.Add(emailAttachement);

或者,使用接受Stream和name / content-type的构造函数。请注意,如果您允许人们将任意文件上传到您的Web服务器的根目录,则需要考虑一些事项。我会尽量避免将它们写入磁盘(除非你想要它们存档),我不会把它们写到我的web-root。

答案 1 :(得分:3)

new Attachment需要文件名,而非内容。

编辑:堆栈跟踪清楚地给出了提示。使用它:)

答案 2 :(得分:1)

尝试使用此附加

message.Attachments.Add(
    new Attachment(
        new MemoryStream(ResumeUpload.FileBytes), "attachmentName.ext"
        )
    );

这将获取上传的字节并使用它们制作流。流应该稍后处理。

答案 3 :(得分:1)

如果有人对此感兴趣,我会让它发挥作用,这就是它最终的结果:

ResumeUpload.PostedFile.SaveAs(Path.Combine(Server.MapPath("/"), "resumes", ResumeUpload.FileName));

var emailAttachement = new Attachment(Path.Combine(Server.MapPath("/"), "resumes", ResumeUpload.FileName));
message.Attachments.Add(emailAttachement);

using (var client = new SmtpClient())
{
    client.Send(message);
}

感谢大家的帮助:)