首页 新闻 会员 周边

浏览4个不类型的文件,点保存时将这4个文件一起上传的服务器指定位置方法应该怎么实现

0
悬赏园豆:50 [已解决问题] 解决于 2012-08-22 17:58

如图:点保存3D模型时,把这些文本框的值插入数据库,在把红框中的4个文件上传到服务器指定的位置,现 在添加数据已经写好了,可是怎么上传4个不同文本框的文件呢?我是个新手,请各位大侠提供个方法,不慎感谢!!!这是添加修改的方法,只写了一半,请帮忙把上传的方法补全,灰常感谢!

 

  1  public ActionResult Product3DModelAdd(string p_3DColor, decimal length, decimal width, decimal height, int layerId, int height3D, string modeUrl, string modeUVUrl, string modePic, string modeTopView, int productId)
  2         {
  3             if (!_permissionService.Authorize(StandardPermissionProvider.ManageCatalog))
  4                 return AccessDeniedView();
  5 
  6             var product = _productService.GetProductById(productId);
  7             if (product == null)
  8                 throw new ArgumentException("No product found with the specified id");
  9            
 10             //-----------------------------
 11             string newModeUrl = DateTime.Now.ToString("yyyyMMddHHmmss") + "_scmx.xml";
 12             string newModeUVUrl = DateTime.Now.ToString("yyyyMMddHHmmss") + "_mxuv.jpg";
 13             string newModePic = DateTime.Now.ToString("yyyyMMddHHmmss") + "_mxslt.png";
 14             string newModeTopView = DateTime.Now.ToString("yyyyMMddHHmmss") + "_mxdst.png";
 15 
 16             var product3DModel = _productService.GetProduct3DModelByProductId(productId);//查询3DModel表中是否有值
 17             if (product3DModel != null)
 18             {
 19                 product3DModel.P_3DColor = p_3DColor;
 20                 product3DModel.Length = length;
 21                 product3DModel.Width = width;
 22                 product3DModel.Height = height;
 23                 product3DModel.LayerId = layerId;
 24                 product3DModel.Height3D = height3D;
 25                 product3DModel.ModeUrl = modeUrl = newModeUrl;
 26                 product3DModel.ModeUVUrl = modeUVUrl = newModeUVUrl;
 27                 product3DModel.ModePic = modePic = newModePic;
 28                 product3DModel.ModeTopView = modeTopView = newModePic;
 29                 product3DModel.UpdatedOnUtc = DateTime.UtcNow;
 30 
 31                 _productService.UpdateProduct3DModel(product3DModel);
 32             }
 33             else
 34             {
 35                 var p3d = new P_3DModel()
 36                 {
 37                     P_3DColor = p_3DColor,
 38                     Length = length,
 39                     Width = width,
 40                     Height = height,
 41                     LayerId = layerId,
 42                     Height3D = height3D,
 43                     ModeUrl = modeUrl = newModeUrl,
 44                     ModeUVUrl = modeUVUrl = newModeUVUrl,
 45                     ModePic = modePic = newModePic,
 46                     ModeTopView = modeTopView = newModeTopView,
 47                     ProductId = productId,
 48                     CreatedOnUtc = DateTime.UtcNow,
 49                     UpdatedOnUtc = DateTime.UtcNow,
 50                 };
 51                 _productService.InsertProduct3DModel(p3d);
 52             }
 53             //-----上传--------2012-8-20----<S>--请在下帮忙实现下上传的方法--以下是我写的有问题------------
 54             Boolean fileOK = false;
 55             string NewFileName = DateTime.Now.ToString("yyyyMMddHHmmss");   //文件名
 56             String fileExtension = System.IO.Path.GetExtension(modeUrl).ToLower(); //获得文件的扩展名,并转换成小写
 57 
 58             string path = Server.MapPath("~/Content/3DModel/");  //服务器路径
 59             string sFilePath = System.IO.Path.Combine(path, NewFileName);  //文件存放路径
 60 
 61             //判断服务器上年月文件夹是否已经存在,不存在建立
 62             String sFileDir = DateTime.Now.ToString("yyyy-MM");  //文件夹名
 63             if (!System.IO.Directory.Exists(path + sFileDir))
 64             {
 65                 System.IO.Directory.CreateDirectory(path + sFileDir);
 66             }
 67             if (modeUrl != null)
 68             {
 69                 //限定只能上传.xml的文件
 70                 String[] allowedExtensions = { ".xml" };
 71                 //对上传的文件的类型进行一个个匹对
 72                 for (int i = 0; i < allowedExtensions.Length; i++)
 73                 {
 74                     if (fileExtension == allowedExtensions[i])
 75                     {
 76                         fileOK = true;
 77                         break;
 78                     }
 79                     else
 80                     {
 81                         Response.Write("<script>alert('只能上传.xml后缀的文件');</script>");
 82                     }
 83                 }
 84                 //file = Request.Files["file1"];
 85                 if (modeUrl.ContentLength > 0)
 86                 {
 87                     //保存文件
 88                     NewFileName = sFileDir + "/" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_scmx." + fileExtension;
 89                     modeUrl.SaveAs(path + NewFileName);
 90                 }
 91                 //ViewBag.FileName = System.IO.Path.GetFileName(file.FileName);
 92             }
 93             else
 94             {
 95                 Response.Write("<script>alert('没有选择要上传的文件');</script>");
 96             }
 97             //----上传--------2012-8-20----<E>----------------
 98 
 99             return Json(new { Result = true }, JsonRequestBehavior.AllowGet);
100         }
天*^o^*.使的主页 天*^o^*.使 | 初学一级 | 园豆:140
提问于:2012-08-20 19:05
< >
分享
最佳答案
0

首先你前台不能用ajax提交表单,提交后Action里就和webform一样保存文件了:

Request.Files["f1"].SaveAs(xx);

Request.Files["f2"].SaveAs(xx);

如果你前台用的是ajax提交的,那你就想办法把它弄到form表单里提交。

另外这种表单你的Action不必把表单项都搞成参数,改起来多麻烦,直接在请求里取。

收获园豆:50
向往-SONG | 老鸟四级 |园豆:4853 | 2012-08-20 19:33

我前台就是用ajax请求的,因为这个项目是用mvc3做的,前台文本框里的值在Action都得到了,下面就是不知道应该怎么把这4个文本框里的文件传到服务器上,方法不知道应该怎么写了,能否给个实例???

天*^o^*.使 | 园豆:140 (初学一级) | 2012-08-20 20:34

@天*^o^*.使: 

不用ajax最方便,要用的话只能伪装一下了:

弄一个iframe里面放个form专门放上传的,“产品名称”那些做成hidden的也放里面,点保存的时候把“产品名称“这些值取到对应的hidden里,然后提交iframe里面的form就是啦。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-20 20:54

@向往-SONG: 可是点保存时怎么取这4个文本框里的值进行上传呢?我现在只能一次上传一个......

天*^o^*.使 | 园豆:140 (初学一级) | 2012-08-20 21:06

@天*^o^*.使: 

你放了几个file控件在form里就会自动上传了几个文件啊,后台只管保存就可以了。

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-20 21:19
其他回答(2)
0

在上传类型判断的地方允许这4种类似上传就ok了

jason2013 | 园豆:1998 (小虾三级) | 2012-08-21 09:12
0

HttpFileCollection files = System.Web.HttpContext.Current.Request.Files;
 for (int iFile = 0; iFile < files.Count; iFile++)
  {
          HttpPostedFile postedFile = files[iFile];

   }

前面一些文本框用AJAX提交,把4个浏览按钮放到form里,用上面的方法循环取出需要上传的文件即可。注意:如果有多个form提交时form名称要和方法一一对应,不然会找不着提着的form,from里包的form就会被忽略。

天*^o^*.使 | 园豆:140 (初学一级) | 2012-08-22 17:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册