0

fineuploadを使用してファイルをアップロードするための次のWebサービスがあります

   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; }
        }
    }

Internet Explorer 8 および 9 を除くすべてのブラウザーで問題なく動作しますが、Internet Explorer 10 でも動作します。

これは例外です IO Exception 別のプロセスで使用されているため、プロセスはファイル C:\Users\user\Desktop\file.pdf にアクセスできませんでした。(スウェーデン語から翻訳された例外)

4

1 に答える 1

0

IE 9以下では、単一のファイルのアップロードであっても、常に request.Files[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;

もちろん、最初のファイルだけを読んでいると仮定して...

于 2013-03-27T11:02:42.457 に答える