Tho*_*erg 5 c# upload image asp.net-ajax ajaxcontroltoolkit
我正在使用AsyncFileUpload(AJAX Toolkit)上传图像.我有一个处理图像大小调整的按钮.这已经工作了一段时间了,但现在不行了......
protected void BtnUploadImage_Click(object sender, EventArgs e)
{
var imageFileNameRegEx = new Regex(@"(.*?)\.(jpg|jpeg|png|gif)$",
RegexOptions.IgnoreCase);
if (!AsyncFileUpload1.HasFile ||
!imageFileNameRegEx.IsMatch(AsyncFileUpload1.FileName))
{
AsyncFileUpload1.FailedValidation = true;
ErrorLabel.Visible = true;
return;
}
ErrorLabel.Visible = false;
var file = AsyncFileUpload1.PostedFile.InputStream;
var img = Image.FromStream(file, false, false);
...
}
Run Code Online (Sandbox Code Playgroud)
另一件我觉得奇怪的事情:如果我尝试的图像小于80kb它可以工作..!
我们试图重启服务器,但没有变化.相同的代码在我的机器上运行良好.(听说之前?? :))
我还尝试将文件保存在服务器上,然后通过Image.FromFile()获取文件,但后来我得到"无法访问已关闭的文件".
怎么解决这个?
我会确保流在开始时定位:
var file = AsyncFileUpload1.FileContent;
file.Seek(0, SeekOrigin.Begin);
var img = Image.FromFile(file);
Run Code Online (Sandbox Code Playgroud)
第二件事情来检查:该requestLengthDiskThreshold设置.除非指定此设置,否则默认值为... yes,80 KB.
注意: imo不管是使用Image直接读取文件流还是使用中间MemoryStream都不应该有整体区别(除了在后一种情况下你实际上将整个文件加载到内存两次的事实).无论哪种方式都将读取原始文件流,因此流位置,CAS权限,文件权限等仍然适用.
注2:是的,一定要确保正确处理这些资源:)