我有一个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);
答案 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保存临时副本并从文件加载图像?