如图:点保存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 }
首先你前台不能用ajax提交表单,提交后Action里就和webform一样保存文件了:
Request.Files["f1"].SaveAs(xx);
Request.Files["f2"].SaveAs(xx);
如果你前台用的是ajax提交的,那你就想办法把它弄到form表单里提交。
另外这种表单你的Action不必把表单项都搞成参数,改起来多麻烦,直接在请求里取。
我前台就是用ajax请求的,因为这个项目是用mvc3做的,前台文本框里的值在Action都得到了,下面就是不知道应该怎么把这4个文本框里的文件传到服务器上,方法不知道应该怎么写了,能否给个实例???
@天*^o^*.使:
不用ajax最方便,要用的话只能伪装一下了:
弄一个iframe里面放个form专门放上传的,“产品名称”那些做成hidden的也放里面,点保存的时候把“产品名称“这些值取到对应的hidden里,然后提交iframe里面的form就是啦。
@向往-SONG: 可是点保存时怎么取这4个文本框里的值进行上传呢?我现在只能一次上传一个......
@天*^o^*.使:
你放了几个file控件在form里就会自动上传了几个文件啊,后台只管保存就可以了。
在上传类型判断的地方允许这4种类似上传就ok了
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就会被忽略。