上传文件时mvc3 Path.GetExtension问题

时间:2013-05-24 19:33:21

标签: asp.net-mvc-3 file-upload imageresizer

我正在获取在上传文件几天并且隔离了问题时,无法对文件上执行所请求的操作时出现用户映射部分打开错误。这段代码不起作用

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。这2行怎么可能导致错误...

 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

2 个答案:

答案 0 :(得分: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();
   }

请注意此代码未经测试

答案 1 :(得分:0)

实际上,它是easier than that

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

你让ImageResizer做得越多,工作就越快,越安全。您之前的代码允许上传任何扩展文件 - 这是一个巨大的潜在利用机会。 &LT;分机&GT;只允许图片扩展。