郑文亮 发表于 2012-12-10 14:29:18

android-HttpClient上传信息(包括图片)到服务端

<div id="cnblogs_post_body">需要下载apache公司下的HttpComponents项目下的HTTPCLIENT
----------地址为http://hc.apache.org/downloads.cgi
主要是用到了httpmime-4.1.2.jar包
android客户端:

以下是请求action的jsp表单(测试用)

<form action="AddFoodStyle" enctype="multipart/form-data" method="post">   
    <div style="width:300px;">
      <s:textfield label="菜式名称" name="foodname"></s:textfield><br/>      
      <s:select name="foodstyle" list="list" label="菜式类别" listKey="Itemid" listValue="itemname"> </s:select><br/>      
      <s:textfield label="菜式价格" name="price"></s:textfield><br/>      
      
      <s:file label="菜式图片" name="foodimg"></s:file><br/>      
      
      <s:textarea label="菜式标签" name="foodtab" cols="20"cssStyle=""></s:textarea><br/>      
      
      <s:textfield label="菜式状态" name="state"></s:textfield><br/>      
      
      <s:submit value="添加"/>
      </div>      
    </form>
模拟构造上面的请求表单:
private String url="http://192.168.2.189:8080/MyOrderMeal/AddFoodStyle";
   HttpClient httpclient= new DefaultHttpClient();
   HttpPost httpPost= new HttpPost(url);
   MultipartEntity mulentity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
      mulentity.addPart("foodname", new StringBody(foodname.getText().toString().trim()));
      mulentity.addPart("foodstyle", new StringBody(foodstyle.getText().toString().trim()));
      mulentity.addPart("price", new StringBody(foodprice.getText().toString().trim()));
       //添加图片表单数据      
      FileBody filebody = new FileBody(this.image);      
      mulentity.addPart("foodimg",filebody );   
      mulentity.addPart("foodtab", new StringBody(foodtab.getText().toString().trim()));
      mulentity.addPart("state", new StringBody("1"));         
      httpPost.setEntity(mulentity);
      HttpResponse response =    httpclient.execute(httpPost);
      
      if(response.getStatusLine().getStatusCode()==HttpStatus.SC_OK)
      {
            makeToase("上传成功",true);
            if(this.image.exists())
            this.image.delete();
      }
      else
      {
            makeToase("上传失败",true);
      }


服务端:action的配置

   <action name="AddFoodStyle" class="com.ordermeal.xiao.action.AddFoodStyle">
          <result name="success" type="redirect">/ShowAddFoodStyle</result>
   </action>
   
    action的编写
public class AddFoodStyle extends ActionSupport{
    /**
   *
   */
    private static final long serialVersionUID = -8380963167787044860L;
   
    private String foodname;
    private Integer foodstyle;
    private Double price;
   
   //接收上传文件
    private File foodimg;
    private String foodimgFileName;
    private String foodimgContentType;
   
    private String foodtab;
    private Integer state;

、、、、省略getset方法

@Override
    public String execute() throws Exception {      
      
      FoodStyleDao fsd = DaoFactory.getFoodStyleDao();
      FoodStylefoodstyleob= new FoodStyle();      
      foodstyleob.setFoodname(foodname);
      foodstyleob.setMystyletype(foodstyle);
      foodstyleob.setFoodprice(price);
      foodstyleob.setImageurl(foodimgFileName);
      foodstyleob.setFoodtab(foodtab);
      foodstyleob.setFdstystate(state);      
      fsd.addFoodStyle(foodstyleob);
      String path= ServletActionContext.getServletContext().getRealPath("/");
       //保存上传文件
       FileUtil.copyFile(foodimg, path+"/images/"+foodimgFileName);
       return SUCCESS;
    } //参考 http://blog.csdn.net/liwei3gjob/article/details/7870353
页: [1]
查看完整版本: android-HttpClient上传信息(包括图片)到服务端