0

上传文件时,我收到“无法对具有用户映射部分打开错误问题的文件执行请求的操作”这一问题已经困扰了几天并已隔离问题..此代码不起作用

var fileName = Path.GetExtension(file.FileName);


                                var changename = profile.registrationID+ fileName;
                                var mytrail = Path.Combine(Server.MapPath("~/uploads/profilepic"), changename);
                                file.SaveAs(mytrail);
                                ImageBuilder.Current.Build(mytrail, mytrail, new ResizeSettings("width=100&height=130&mode=stretch"));
                                ModelState.Clear();
                                db.Entry(profile).State = EntityState.Modified;
                                db.SaveChanges();
                                return View(profile);

当我尝试上传图片时,出现用户映射部分打开错误ImageBuilder.Current.Build(mytrail, mytrail, new ResizeSettings("width=100&height=130&mode=stretch")); 突出显示。问题是,在上面的代码中,如果我将 fileName 更改为

var fileName = "abc";

整个代码工作图片上传没有错误唯一的事情是图片被保存为文件而不是.jpg或.gif。这两行可能会导致错误怎么办...

 var fileName = Path.GetExtension(file.FileName);
                                ImageBuilder.Current.Build(mytrail, mytrail, new ResizeSettings("width=100&height=130&mode=stretch"));

这是来自http://imageresizing.net/docs/managed的​​ imageResizer

4

2 回答 2

0

实际上,它比这更容易

ImageBuilder.Current.Build(file, 
   "~/uploads/profilepic/" + profile.registrationID + ".<ext>", 
    new ResizeSettings("width=100&height=130&mode=stretch"));

你让 ImageResizer 做的越多,工作就会越快越安全。您之前的代码允许上传任何扩展文件 - 一个巨大的潜在利用机会。<ext> 只允许图像扩展。

于 2013-05-29T13:55:13.270 回答
0

我想 imagebuider 使用不正确。我对直接从磁盘位置使用它的方式很陌生。我会尝试直接将它与文件流一起使用,即。

   var fileExtension = Path.GetExtension(file.FileName);
   var fileName = profile.registrationID+ fileExtension;
   var filePathAndName = Path.Combine(Server.MapPath("~/uploads/profilepic"), fileName );

   using(var outStream = new MemoryStream()){
     ImageBuilder.Current.Build(file.InputStream, outStream, new ResizeSettings("width=100&height=130&mode=stretch"));
     FileStream file = new FileStream(filePathAndName, FileMode.Create, System.IO.FileAccess.Write);
     byte[] bytes = new byte[outStream.Length];
     outStream.Read(bytes, 0, (int)outStream.Length);
     file.Write(bytes, 0, bytes.Length);
     file.Close();
   }

请注意此代码未经测试

于 2013-05-25T20:30:53.103 回答