在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,因为其他进程正在使用该文件。(瑞典文翻译的异常)
我相信在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;
当然,假设你只是在读第一个文件。。。