当前位置: 代码迷 >> Android >> android 利用httpclient下传图片
  详细解决方案

android 利用httpclient下传图片

热度:82   发布时间:2016-05-01 20:17:07.0
android 利用httpclient上传图片

需要下载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;

?

、、、、省略get? set方法

?

@Override
?? ?public String execute() throws Exception {?? ????
?? ??? ?
?? ??? ?FoodStyleDao fsd = DaoFactory.getFoodStyleDao();
?? ??? ?FoodStyle? foodstyleob= 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;

?? ?}
  相关解决方案