【问题标题】:How Do i pass a file into a web method?如何将文件传递给 Web 方法?
【发布时间】:2012-05-04 05:55:54
【问题描述】:

我想将文件传递到 [Webmethod] 中,然后将其作为电子邮件附件发送。

我该怎么做呢?我不确定从哪里开始?

FileUpload1.PostedFile.FileNameFileUpload1.FileContent 是我想要传递给我的 [webmethod] 的两件事。

我的问题是 FileUpload1.FileContent,因为我已经可以将 FileUpload1.PostedFile.FileName 作为字符串发送

lblEmailSent.Text = Send.Sendemail(txtTo.Text, txtSubject.Text, txtbody.Text, FileUpload1.PostedFile.FileName, FileUpload1.FileContent);

我的通话声明带有蓝色下划线,给出的两个错误如下所示:

*1)*最佳重载方法匹配 'WebTestServiceApp.localhost.Service1.Sendemail(字符串,字符串, string, string, WebTestServiceApp.localhost.Stream)' 有一些无效 论据

*2)*参数 5:无法从 'System.IO.Stream' 转换为 'WebTestServiceApp.localhost.Stream'

请有人告诉我如何将 FileUpload1.FileContent 发送到 [Webmethod]

提前致谢。

【问题讨论】:

  • 要查看我正在尝试做什么,请查看我的问题:*.com/q/10431928/1356321 这将让您了解我目前拥有的代码。
  • IMO,序列化和反序列化 UploadFile 的“正确”方法是......不要这样做。如果您需要传递文件名和数据,那么一定要这样做 - 但这不需要UploadFile
  • 好的,我如何将 FileUpload1.FileContent 传递给 Web 方法???,我需要将文件附加到电子邮件中,所以我需要上传文件
  • 不,你需要发送数据;这不需要通过UploadFile 完成; base-64 字符串(或 byte[] 如果可行)会简单得多
  • 你指的是哪个“你”? -1 不是我的,并不重要。你希望我为暂时离开我的电脑而道歉吗?发送数据:和你平时在http上发送数据的方式一样; http 正文、http 表单、查询字符串或标题。随便挑。更一般地说:问题是“我如何[一些已经选择的,也许是错误的,实施]?” - 我是说你需要退后一步:“我如何[我想要实现的事情]?”。比较:“拧螺丝用什么锤子最好?”

标签: c# file file-upload webmethod


【解决方案1】:

我的建议是:忘记FileUpload - 只需传递byte[]string(用于名称,或您需要的任何其他内容)。这应该由系统作为 base-64 处理。

FileUpload,您应该可以访问.FileBytes.FileName,避免与Stream 等混淆。

在接收端(带有byte[] 参数),只需:

using(var stream = new MemoryStream(theByteArray)) {...}

【讨论】: