【问题标题】:How to pass content of image file from fileupload control to web method via javascript?如何通过javascript将图像文件的内容从fileupload控件传递到Web方法?
【发布时间】:2009-11-30 18:12:48
【问题描述】:

我在使用文件的二进制内容时遇到问题。我想传递文件的网络方法内容。我通过 javascript 函数 getAsBinary() 从页面上的文件上传控件中检索它。但是当我尝试创建类 Image 的示例时,Web 方法中出现错误。 因此,我拥有带有文件上传控件和脚本管理器的页面 (.aspx)。共有三个javascript函数:

// Get image from fileupload control and pass it in webmethod
function Get_image() {
    var file_uploader = document.getElementById(file_uploader_name);
    var file_content = file_uploader.files[0].getAsBinary();
    imupcon.Get_image(file_content, OnRequestComplete, OnError);
}
// Successful execution
function OnRequestComplete(result) {alert(result);}
//Error execution
function OnError() { alert("Error!");}

我有网络方法的网络服务:

[WebMethod]
public string Get_image(string file_content, string file_name) 
{
 byte[] data = Encoding.Unicode.GetBytes(file_content);
 MemoryStream memStream = new MemoryStream();
 memStream.Write(data, 0, data.Length);

 //Error appears here
 System.Drawing.Image image = System.Drawing.Image.FromStream(memStream);

 memStream.Close();
 return "Hurray!";
}

有没有人知道,原因是什么?如何将文件内容传递给 Web 方法?谢谢。

【问题讨论】:

  • 出于安全考虑,我很确定您不能通过 javascript 上传文件...
  • 报错内容是什么?
  • Image.FromStream 的“非法参数”。

标签: asp.net javascript ajax file-upload webmethod


【解决方案1】:

你不需要Encoding.Unicode.GetBytes 如果它已经是二进制文件。如果您调用 files[0].getAsText("utf-8"),数据将采用 unicode 格式。请注意所有这些方法are now obsolete,您应该使用特征检测并使用standard FileReader API(如果可用)。

【讨论】:

  • 不错。那么OP会做什么呢? r = new FileReader(); r.onloadend = /*...*/; r.readAsBinaryString(file_uploader.files[0].name)?
  • 但是真的是用js函数传递的文件内容来创建类Image的例子吗?
  • 我几乎没听懂你的问题,你也没有给我太多信息,所以我只是指出了可能导致你遇到的任何问题的原因。
  • 我想用帮助文件上传器选择图像文件,然后我想将它的内容传递给 web 方法并在这个 web 方法中在服务器上创建图像文件。但是,当我尝试创建类 Image 的示例或用所选文件的二进制内容填充 FIleStream 时,会出现错误并中断我的 web 方法的执行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2019-01-28
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
相关资源
最近更新 更多