在IE9中上传文件时出现IO错误,适用于IE10、Safari、Chrome和Firefox

本文关键字:IE10 适用于 Safari Firefox Chrome 错误 IO IE9 文件 | 更新日期: 2023-09-27 18:00:27

我有以下Web服务来使用fine-upload 上传文件

   public class UploadHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var svc = new DropzoneService();
            var request = context.Request;
            var formUpload = request.Files.Count > 0;
            var xFileName = request.Headers["X-File-Name"];
            var qqFile = request["qqfile"];
            var dzid = request.Params["dzid"].ToString().Replace(",", String.Empty);
            var rootid = request.Params["rootid"].ToString().Replace(",", String.Empty);
            var formFilename = formUpload ? request.Files[0].FileName : null;
            var filename = xFileName ?? qqFile ?? formFilename;
            var inputStream = formUpload ? request.Files[0].InputStream : request.InputStream;
            var filePath = Path.Combine(context.Server.MapPath("~/App_Data/Queue"), filename);
            using (var fileStream = File.OpenWrite(filePath))
            {
                inputStream.CopyTo(fileStream);
            }
            svc.AddFile(filePath, Int32.Parse(dzid), Int32.Parse(rootid));
            context.Response.ContentType = "application/json";
            context.Response.Write("{'"success'":true}");
        }
        public bool IsReusable
        {
            get { return true; }
        }
    }

它在除InternetExplorer8和9之外的所有浏览器中都能很好地工作,但在InternetExplorer10中它能工作。

这是个例外IO异常进程无法访问文件C:''Users''user''Desktop''file.pdf,因为其他进程正在使用该文件。(瑞典文翻译的异常)

在IE9中上传文件时出现IO错误,适用于IE10、Safari、Chrome和Firefox

我相信在IE 9及以下版本中,您总是需要使用request。文件[0]。InputStream,即使是单个文件上载也是如此。

所以你的代码应该更像。。。

decimal browserVer;
decimal.TryParse(context.Request.Browser.Version, out browserVer);
var inputStream = context.Request.Files.Count > 1 || ( context.Request.Browser.Browser.ToUpper() == "IE" && browserVer < 10 ) ? context.Request.Files[0].InputStream : context.Request.InputStream;

当然,假设你只是在读第一个文件。。。