【发布时间】:2009-12-07 15:55:09
【问题描述】:
我有一个 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);
【问题讨论】:
-
与其尝试从流中打开文件,不如打开保存在磁盘上的物理文件?
-
我没有将文件保存到文件系统。我通过网络服务将它保存到另一台服务器。所以我想传递 web 服务 2 个文件:原始文件(这工作正常)和缩略图(还没有工作)。
标签: asp.net file-upload