Image.FromStream(PostedFile.InputStream)失败.(参数无效.)(AsyncFileUpload))

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()获取文件,但后来我得到"无法访问已关闭的文件".

怎么解决这个?

Pet*_*old 7

我会确保流在开始时定位:

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:是的,一定要确保正确处理这些资源:)