android上传图片至服务器

android上传图片到服务器很常用到,例如上传头像,发表带照片的帖子之类。

首先讲服务器端,服务器端用java,只上传头像在此只用Servlet说明,暂不使用框架。

public class UpLoadImage extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String imagePath = "/headImgs";
		
		request.setCharacterEncoding("utf-8");  //设置编码    
        //获得磁盘文件条目工厂    
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //获取文件需要上传到的路径    
        String requestPath = request.getServletContext().getRealPath(imagePath);
        String realPath = "E:\\headImgs";//realPath是指图片上传的真实路径
        File file=new File(realPath);  
        if(!file.exists()){  
            file.mkdirs();  
        }  
        //设置临时文件夹
        factory.setRepository(new File(realPath));    
        //设置 缓存的大小  
        factory.setSizeThreshold(1024*1024);    
        //文件上传处理    
        ServletFileUpload upload = new ServletFileUpload(factory);
        try {    
            //可以上传多个文件    
            List<FileItem> list = (List<FileItem>)upload.parseRequest(new ServletRequestContext(request));    
            for(FileItem item : list){    
                //获取属性名字    
                String name = item.getFieldName();    
                //如果获取的 表单信息是普通的 文本 信息    
                if(item.isFormField()){                       
                    //获取用户具体输入的字符串,因为表单提交过来的是 字符串类型的    
                    String value = item.getString() ;    
                    request.setAttribute(name, value);    
                }else{    //如果是文件等之类
                    //获取路径名    
                    String value = item.getName() ;    
                    //索引到最后一个反斜杠    
                    int start = value.lastIndexOf("\\");    
                    //截取 上传文件的 字符串名字,加1是 去掉反斜杠,    
                    String filename = value.substring(start+1);    
                    request.setAttribute(name, filename);    
                    //写到磁盘上    
                    item.write( new File(realPath,filename) );    
                    //返回客户端
                    String returnImgPath =  imagePath +"/"+filename;
                    returnImgPath = returnImgPath.substring(1, returnImgPath.length());//去除第一个斜杠
                    System.out.println("上传成功:" + returnImgPath);  
                    response.getWriter().print(returnImgPath);//将路径返回给客户端  
                }    
            }    
                
        } catch (Exception e) {    
            System.out.println("上传失败");  
            response.getWriter().print("上传失败:"+e.getMessage());  
        }    

}
}


这里比较难理解的是路径的问题,这里我是用了虚拟路径,虚拟路径的配置请看 eclipse配置上传文件的虚拟路径(多坑版) 。最后返回图片的路径用于给客户端显示


客户端Android: 使用okHttp

private void upLoadImageToServer() {
        String headImgName = "header.jpg";

        OkHttpUtils.post()
                .addFile("mFile", headImgName, imageFile)
                .url(Config.UPLOAD_HEAD_IMG_URL)
                .build()
                .execute(new StringCallback() {
                    @Override
                    public void onError(Call call, Exception e, int id) {
                        
                    }

                    @Override
                    public void onResponse(String response, int id) {
                        mImageUrl = Config.LOGIN_URL + response;
                    }
                });
    }


使用okHttp上传文件,使用的是表单上传的方式 -- addFile()中,第一个参数是文件的name,相当于web表单上传的input的name,第二个参数是文件的实际名称,这里我取得是head.jpg,第三个是文件。


以上步骤就能把文件(图片)上传完毕了

其实主要在于服务端。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值