zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

android上传图片至服务器详解手机开发

2023-06-13 09:20:06 时间

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,第三个是文件。


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

其实主要在于服务端。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/3165.html

服务器部署程序员系统优化网站设置运维