基于表单的文件上上传

最近一个面试说是准备一个增删改查,一个网友跟我说加上文件上传,于是我就在以前做的一个商品模块的的添加商品那个操作中加上文件上传。我用的是jsp的文件上传的标签,用的是fileupload上传组件,当我提交的时候发现我的到的参数都是空的,后来查资料才知道,用这个组件上传文件,是不能通过普通到了方式得到提交的参数的,下面是我给我你改后的代码,才是通过了,嘿嘿很高兴做一分享一下:

 

public ActionForward addProduct(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {

ActionForward forward = null;

try {

 

 

 

//通过普通的方式的不到参数 


/*String name = request.getParameter("textfield");



String images ="imges/"+ request.getParameter("textfield6");
System.out.println(images+"-----------------");
String basePrice = request.getParameter("textfield4");

String descriptions = request
.getParameter("txt_article_class_description");

String product_addTime = request.getParameter("textfield9");

String procider = request.getParameter("provider_name");


String category = request.getParameter("product_type");*/

 

 

 

 

 


  //以文件上传的方式得到参数
String id = request.getParameter("ids");

Map<String,String> map =new HashMap<String, String>();//用于存放文本域中的参数

DefaultFileItemFactory factory = new DefaultFileItemFactory();

ServletFileUpload fileUp = new ServletFileUpload(factory);//获取文件上传的对象

fileUp.setFileItemFactory(factory);

fileUp.setSizeMax(1000 * 100);//设置文件上传的最大限制
String t_name = null;
try{
List<FileItem> items = fileUp.parseRequest(request);
System.out.println(items+"------------");

FileItem fileItem = null;

Iterator<FileItem > it= items.iterator();
while (it.hasNext()){

FileItem item = it.next();
//判断是否是文件域
if(item.isFormField()){
  String filename = item.getFieldName();//得到参数的名字
  String value = item.getString("utf-8");//得到参数的值

  map.put(filename, value);//放入到map集合中


}else{
fileItem = item;
}

}

String path = null;

path= this.getServlet().getServletContext().getRealPath("/images");//设置文件存放的目录

File photoesDir = new File(path);
if(!photoesDir.exists()){

photoesDir.mkdir();

}

t_name = fileItem.getName().substring(fileItem.getName().lastIndexOf("//") + 1);//截取文件名称


path = path + "//" +t_name;

System.out.println(path+"---------");

File file = new File(path);



  // 上传操作,把用户在页面上传的文件保存在指定的路径

fileItem.write(file);

}catch(Exception e){

e.printStackTrace();
}



Product prd = new Product();

if(id!=""){
prd.setId(Integer.parseInt(id));

}
prd.setImages(t_name);

Category ca = (Category) dao.findByID(Integer.parseInt(map.get("product_type")));

//ca.setId(Integer.parseInt(category));

Provider provider = new Provider();
provider.setProvider_id(Integer.parseInt(map.get("provider_name")));

prd.setCategory(ca);

prd.setName(map.get("textfield"));

prd.setProvider_id(provider);
prd.setDescriptions(map.get("txt_article_class_description"));

prd.setProduct_addTime(map.get("textfield9"));

prd.setBasePrice(Double.parseDouble(map.get("textfield4")));

dao.addProduct(prd);

forward = mapping.findForward("add");

} catch (Exception e) {

e.printStackTrace();

request.setAttribute("message", "当前系统不稳定请稍候再试");

forward = mapping.findForward("add");

}

return forward;
}

 我的思路是:1、在页面的表单标签中加入一个enctype="multipart/form-data"属性,这个是用来规定文件上上传的格式

 

 

 

                 2、 使用这个组件你需要两个jar包,分别是:commons-io-1.4.jar和commons-fileupload-1.2.2.jar

                 3、通过request的到所有参数的集合,判断得到的参数是不是文本域,如果是就把参数的名字和值存放map集合中,如果不是文本域就把文件写入到指定的路径中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值