如何从asp.net中的FileUpload控件创建图像对象?

时间:2009-12-06 09:27:30

标签: asp.net file-upload

我有一个FileUpload控件。我正在尝试保存上传的文件(图像),并保存文件的几个缩略图副本。

当我尝试这样的事情时:

System.Drawing.Image imgOriginal = System.Drawing.Image.FromStream(PhotoUpload.PostedFile.InputStream);

我收到“System.ArgumentException:参数无效。”

我也尝试使用PhotoUpload.FileBytes从文件字节而不是InputStream创建图像,但是会发生同样的错误。

上传的文件是jpg。我知道这是一个有效的jpg,因为它保存了原来的确定。

编辑:此代码确实有效。参数无效是由于PhotoUpload.PostedFile.InputStream为空...这似乎是一个完全不同的问题。看起来在我保存原始文件后,文件上载流消失了。

编辑:发现FileUpload的InputStream只能被读取/消耗一次然后它就消失了。

为了解决这个问题,我将fileupload文件字节保存到字节数组中,并使用字节数组创建映像副本。

代码:

// Copy the FileBytes into a byte array
byte[] imageData = PhotoUpload.FileBytes;

// Create a stream from the byte array if you want to save it somewhere:
System.IO.Stream myStream = new System.IO.MemoryStream(imageData);

// Or create an image from the stream as many times as needed:
System.Drawing.Image imgOriginal = System.Drawing.Image.FromStream(myStream);

1 个答案:

答案 0 :(得分:2)

看一下这个链接

ASP Net - How to pass a postedfile to a system.drawing.image

  

这是我的函数调用:

     

uploadAndSizeImage(System.Drawing.Image.FromStream   (uploadedFileMD.PostedFile.InputStream))

     

我收到了这个错误:

     

异常详细信息:   System.ArgumentException:无效   使用的参数。

     尽管如此,谷歌并没有出现太多变化   确实找到了它的参考   由流阅读器引起   在流的尽头和我   需要将其重置为一个位置。   但这有点模糊而不是   确定它是否适用于此。

这有帮助吗?

编辑:

此外,您是否尝试使用

等手动阅读文件
System.IO.FileStream fs = System.IO.File.OpenRead(@"Image.JPG");
byte[] data = new byte[fs.Length];
fs.Read(data, 0, data.Length);

System.IO.MemoryStream ms = new System.IO.MemoryStream(data);
System.Drawing.Image image = Image.FromStream(ms);

或者从FileUpload保存临时副本并从文件加载图像?