2010-11-03 165 views
2

试图上传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... 
} 

目前,文件名可变是越来越设置为:

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) 
+0

和期望是什么路? – Andrey 2010-11-03 10:58:41

+0

ResumeUpload.SaveAs()行上的代码是否失败? – 2010-11-03 11:02:55

+0

该路径应该很好,我试图将文件保存到该路径,然后用streamreader从它读取并附加到电子邮件作为附件。将包括异常现在的问题... – timothyclifford 2010-11-03 11:03:42

回答

3

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

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

另外,使用接受一个Stream和名称/内容类型的构造。请注意,如果您允许用户将任意文件上传到Web服务器的根目录中,则需要考虑一些事项;我会尽量避免将它们写入磁盘(除非您想将它们存档),并且我不会将它们写入到我的web根目录。

2

new Attachment需要一个文件名,而不是内容。

编辑:stacktrace清楚地给出了这个提示。使用它:)

+0

我试图使用接受Stream的Attachment构造函数,但.ReadToEnd返回一个字符串...谢谢 – timothyclifford 2010-11-03 11:20:10

1

尝试用这个代替

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

此连接将上传的字节,使流他们。该流应该稍后处理。

0

如果任何人的兴趣,我得到了它的工作,这是它如何结束了寻找:

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); 
} 

感谢大家的帮助:)

相关问题