超越代理-超越代理

  超越代理-超越代理【主管╇QV:555333】超越代理【╇QV:555333】《优_质_平_台《《_《《置_顶_待_遇《《一步到位》》用springMVC来做项目,如果遇到文件上传,那么一定要用spring自带的文件处理类来处理上传的文件,因为效率实在高过其他的。

  从界面传过来的参数,如果设置了值对象,那么可以从值对象里面取出字符串类型的普通参数,如果不这样做,也可以直接从request里面获得,两种方法都可以。

  超越代理-超越代理【主管╇QV:555333】超越代理【╇QV:555333】《优_质_平_台《《_《《置_顶_待_遇《《一步到位》》问题是如果值对象里面写了其他类型的变量,妄想像Struts2那样处理,springMVC就会报出400 Bad Request的错误。

  在Struts2里面,我们可以定义一个值对象为

  public class ImageVo{

  private String roomnumber;

  private File image1;

  private File image2;

  private File image3;

  }

  然后在后台从前台传过来的值对象里面取出image1……,那就是一个文件流了,非常好处理上传文件。但springMVC只能接受全部为string类型的字符串值,那么该怎么做呢?

  前台Extjs4代码:

  /**

  *图片添加

  * type{Ext.form.Panel}

  */

  var addImageForm=new Ext.form.Panel({

  border:false,bodyPadding:5,id:'addImageForm',height:350,

  fieldDefaults:{labelWidth:80,labelSeparator:":",anchor:'95%'},

  items:[

  {xtype:'fieldset',title:'图片上传',collapsible:true,

  items:[

  {

  xtype:'textfield',

  fieldLabel:'房间号码',

  name:'roomnumber',

  id:'roomnumber1',

  allowBlank:false,

  maskRe:/[\d]/,

  reegx:/[\d{4}]/,

  minLength:4,

  maxLength:4,

  emptyText:'请输入四位的房间号码(前两位代表楼层,后两位代表房间号)',

  regexText:'请输入正确的房间号码',

  //验证该房间号码是否存在!

  listeners:{

  blur:function(e,t,eOpts){

  var roomnumber=e.rawValue;

  if(roomnumber.length==4){

  Ext.Ajax.request({

  method:'post',

  params:{roomnumber:roomnumber},

  url:'/room/findroomhold',

  callback:function(options,success,response){

  var jsonString=Ext.JSON.decode(response.responseText);

  if(jsonString.success){

  }else{

  Ext.Msg.alert('警告',jsonString.msg);

  }

  }

  });

  }

  }

  }

  },{

  xtype:'filefield',

  fieldLabel:'上传图片1',

  name:'image1',

  id:'image1',

  buttonText:'',

  buttonConfig:{iconCls:'upload'},

  listeners:{

  change:function(btn,value,eOpts){

  var img_reg=/\.([jJ][pP][gG]){1}$|\.([jJ][pP][eE][gG]){1}$|\.([gG][iI][fF]){1}$|\.([pP][nN][gG]){1}$|\.([bB][mM][pP]){1}$/;

  if(img_reg.test(value)){

  var img=Ext.getCmp('img1');

  var file=btn.fileInputEl.dom.files[0];

  var url=URL.createObjectURL(file);

  img.setSrc(url);

  }else{

  Ext.Msg.alert('提示','请选择图片类型的文件!');

  return;

  }

  }

  }

  },{

  xtype:'filefield',

  fieldLabel:'上传图片2',

  name:'image2',

  id:'image2',

  buttonText:'',

  buttonConfig:{iconCls:'upload'},

  listeners:{

  change:function(btn,value){

  var img_reg=/\.([jJ][pP][gG]){1}$|\.([jJ][pP][eE][gG]){1}$|\.([gG][iI][fF]){1}$|\.([pP][nN][gG]){1}$|\.([bB][mM][pP]){1}$/;

  if(img_reg.test(value)){

  var img=Ext.getCmp('img2');

  var file=btn.fileInputEl.dom.files[0];

  var url=URL.createObjectURL(file);

  img.setSrc(url);

  }else{

  Ext.Msg.alert('提示','请选择图片类型的文件!');

  return;

  }

  }

  }

  },{

  xtype:'filefield',

  fieldLabel:'上传图片3',

  name:'image3',

  id:'image3',

  buttonText:'',

  buttonConfig:{iconCls:'upload'},

  listeners:{

  change:function(btn,value){

  var img_reg=/\.([jJ][pP][gG]){1}$|\.([jJ][pP][eE][gG]){1}$|\.([gG][iI][fF]){1}$|\.([pP][nN][gG]){1}$|\.([bB][mM][pP]){1}$/;

  if(img_reg.test(value)){

  var img=Ext.getCmp('img3');

  var file=btn.fileInputEl.dom.files[0];

  var url=URL.createObjectURL(file);

  img.setSrc(url);

  }else{

  Ext.Msg.alert('提示','请选择图片类型的文件!');

  return;

  }

  }

  }

  }

  ]

  },{xtype:'fieldset',title:'图片预览',layout:'column',defaults:{width:130},

  items:[

  {xtype:'image',id:'img1'},

  {xtype:'image',id:'img2'},

  {xtype:'image',id:'img3'}

  ]

  }

  ],

  dockedItems:[

  {

  xtype:'toolbar',dock:'bottom',ui:'footer',layout:{pack:'center'},

  items:[

  {text:'确认上传',disabled:true,formBind:true,handler:function(){

  var form=this.up('form').getForm();

  if(form.isValid()){

  form.submit({

  url:'/image/add',

  method:'post',

  submitEmptyText:false,

  waitMsg:'请稍等,系统正在帮您添加',

  success:function(form,action){

  //Ext.Msg.alert('成功',"上传成功!");

  Ext.Msg.alert('成功',action.result.msg);

  },

  failure:function(form,action){

  Ext.Msg.alert('失败',action.result.msg);

  //Ext.Msg.alert('失败',"上传失败");

  }

  })

  }

  }},

  {text:'重置',handler:function(){

  this.up('form').getForm().reset();

  }}

  ]

  }

  ]

  });

  后台的java代码,因为只有一个非文件类的值,所以直接放到了参数里面了。

  import com.lhx.hotel.model.Image;

  import com.lhx.hotel.service.ImageService;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.stereotype.Controller;

  import org.springframework.web.bind.annotation.RequestMapping;

  import org.springframework.web.bind.annotation.ResponseBody;

  import org.springframework.web.multipart.MultipartFile;

  import org.springframework.web.multipart.MultipartHttpServletRequest;

  import org.springframework.web.multipart.commons.CommonsMultipartResolver;

  import javax.servlet.http.HttpServletRequest;

  import java.io.File;

  import java.io.IOException;

  import java.util.*;

  /**

  *Created by xin on 14-5-18.

  */

   Controller

   RequestMapping("/image")

  public class ImageController{

  Map<String,Object>outmap=new HashMap<String,Object>();

   Autowired

  private ImageService imageService;

   RequestMapping("/add")

   ResponseBody

  public Map<String,Object>add(String roomnumber,HttpServletRequest request)throws IOException{

  List<String>fileTypes=new ArrayList<String>();

  fileTypes.add(".jpg");

  fileTypes.add(".jpeg");

  fileTypes.add(".bmp");

  fileTypes.add(".gif");

  fileTypes.add(".png");

  //是否成功上传了文件

  boolean ishasuploadimage=false;

  //成功上传了n个图像

  int imageNum=0;

  /**

  *想通过ImageVo imageVo,但需要全部是string类型

  *并且没有其他什么参数,大材小用,舍弃

  *String roomnumber=imageVo.getRoomnumber();

  */

  String imagepath=request.getRealPath("/upload");

  CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver(request.getSession().getServletContext());

  if(multipartResolver.isMultipart(request)){

  MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)request;

  //String roomnumber=multiRequest.getParameter("roomnumber");

  if(!"".equals(roomnumber)&&roomnumber!=null){

  int ronumber=Integer.valueOf(roomnumber);

  Iterator<String>iter=multiRequest.getFileNames();

  Image image=null;

  while(iter.hasNext()){

  MultipartFile file=multiRequest.getFile((String)iter.next());

  //byte[]bytes=file.getBytes();

  //long size=file.getSize();

  //有上传文件的话,容量是大于0的。

  if(file.getSize()>0){

  ishasuploadimage=true;

  String imagename=file.getOriginalFilename();

  String ext=imagename.substring(imagename.lastIndexOf("."));

  if(fileTypes.contains(ext)){

  //文件名为:房间号码+image+系统时间+后缀

  String fileName=roomnumber+"image"+System.currentTimeMillis()+ext;

  image=new Image();

  image.setPhpath(fileName);

  image.setPhroomnumber(ronumber);

  File localFile=new File(imagepath,fileName);

  try{

  file.transferTo(localFile);

  imageService.insertSelective(image);

  imageNum++;

  }catch(IOException e){

  e.printStackTrace();

  outmap.put("success",false);

  outmap.put("msg","系统出错");

  return outmap;

  }

  }else{

  outmap.put("success",false);

  outmap.put("msg","成功上传"+imageNum+"张图片,遇到不能上传的非图片类的文件而出错!");超越代理-超越代理【主管╇QV:555333】超越代理【╇QV:555333】《优_质_平_台《《_《《置_顶_待_遇《《一步到位》》

  return outmap;

  }

  }

猜你喜欢

转载自www.cnblogs.com/zhangweiqing/p/12825061.html