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
服务器部署程序员系统优化网站设置运维相关文章
- Android Studio 4.1 发布,全方位提升开发体验
- android 读取本地数据库db文件(Android sqlite)
- 1000套安卓(Android)毕业设计(带论文)、大作业、实例快速下载 (Android Studio)
- Android listview 实现列表多选
- android定时器取消,Android定时器崩溃取消
- android attrs获取_关于Android attrs 自定义属性的说明
- Android Services Library_android freeware
- android 中获取sha1值的详细说明
- Android studio更新后出现警告:Warning:The `android.dexOptions.incremental` property is deprecated and it has
- 【Android RTMP】RTMP 数据格式 ( FLV 视频格式分析 | AVC 序列头格式解析 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | Instrumentation 源码分析 )
- 【错误记录】Android Studio 编译报错 ( Could not find com.android.tools.build:gradle:4.2.1. )
- 【Android 插件化】插件化框架整理
- 【Android 逆向】Android 系统文件分析 ( cmdline 系统启动参数文件 | crypto 密码算法信息文件 | devices 设备信息文件 )
- 【Android Gradle 插件】ProductFlavor 配置 ( multiDexEnabled 配置 | multiDexKeepFile | multiDexKeepProguard )
- 基于标准的http来实现Android多文件上传详解手机开发
- Linux下Android开发:提升技能、节省成本(linux的安卓开发)
- 「唯物」把Windows和Android来Remix一下,就得出了这个东西
- cocos2d-2.0-x-2.0.3交叉编译到android报错解决
- Android中发送Http请求(包括文件上传、servlet接收)的实例代码