1、 android Retrofit2 实现图片上传携带基本数据token校验

1.1. 服务端代码:

package com.denganzhi.project;import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;/*** Servlet implementation class FileUploadServlet*/
@WebServlet("/FileUploadServlet")
public class FileUploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//解决post请求的乱码//request.setCharacterEncoding("utf-8");/*    //获取一个输入流ServletInputStream in = request.getInputStream();//读取流String str = IOUtils.toString(in);System.out.println(str);*/System.out.println("----开始------");//获取工厂类实例DiskFileItemFactory factory = new DiskFileItemFactory();//创建解析器类实例ServletFileUpload fileUpload = new ServletFileUpload(factory);//fileUpload通过该对象来限制文件的大小//设置当文件的大小为50KB//fileUpload.setFileSizeMax(1024*50);//设置多个文件的总大小为300mbfileUpload.setSizeMax(1024*1024*300);try {//解析requestList<FileItem> fileItems = fileUpload.parseRequest(request);//遍历fileItems,读取表单的信息for (FileItem fileItem : fileItems) {//判断当前表单项是否是一个普通表单项// 这里获取普通表当的键值对if(fileItem.isFormField()){//获取属性名String fieldName = fileItem.getFieldName();//获取属性值String value = fileItem.getString("utf-8");// uid = 1010100101  输出内容// name = shangchuangSystem.out.println(fieldName+" = "+value);}else{//如果是文件表单项//获取文件的大小long size = fileItem.getSize();//判断size是否为0if(size==0){continue;}//获取文件的类型String contentType = fileItem.getContentType();//获取文件的名字String name = fileItem.getName();//判断name中是否包含有路径信息if(name.contains("\\")){//如果包含则截取字符串name = name.substring(name.lastIndexOf("\\")+1);}//生成一个UUID,作为文件名的前缀String prefix = UUID.randomUUID().toString().replace("-", "");name = prefix+"_"+name;//获取表单项的属性名String fieldName = fileItem.getFieldName();System.out.println("文件的大小: "+size);System.out.println("文件的类型: "+contentType);System.out.println("文件的名字: "+name);System.out.println("表单项name属性名: "+fieldName);//获取ServletContext对象ServletContext context = this.getServletContext();//获取项目的真实路径String path = context.getRealPath("/upload");//判断路径是否存在File file = new File(path);if(!file.exists()){//如果不存在该路径,则创建一个路径file.mkdirs();}File destFile=new File(path+"/"+name);//将文件写入到磁盘中fileItem.write(destFile);System.out.println("文件绝对路径:"+destFile.getAbsolutePath());}}//重定向到一个页面//response.sendRedirect(request.getContextPath()+"/success.jsp");response.getWriter().append("success");}catch(FileSizeLimitExceededException e){//一但捕获到该异常,则说明单个文件大小超过限制。//设置一个错误消息request.setAttribute("msg", "单个文件大小请不要超过50KB");//转发到index.jsprequest.getRequestDispatcher("/index.jsp").forward(request, response);}catch(SizeLimitExceededException e){//一但捕获到该异常,则说明单个文件大小超过限制。//设置一个错误消息request.setAttribute("msg", "所有文件大小请不要超过300mb");//转发到index.jsprequest.getRequestDispatcher("/index.jsp").forward(request, response);}catch (FileUploadException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

图片真实路径上传以后 :code20181225\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Web001\upload\db0193b12ac749c8bff1a5ecceb1834d_ic_launcher.png

1.2.JSP实现图片下载测试:

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><h1>上传文件</h1><p style="color: red">${msg }</p><form action="FileUploadServlet" method="post" enctype="multipart/form-data">用户名 <input type="text" name="name" /> <br /> <br />照片 <input type="file" name="photo1" /> <br /> <br />照片 <input type="file" name="photo2" /> <br /> <br />照片 <input type="file" name="photo3" /> <br /> <br /><input type="submit" value="提交" /></form>
</body>
</html>

1.3.实现图片下载依赖库:

compile 'io.reactivex.rxjava2:rxjava:2.0.8'compile 'io.reactivex.rxjava2:rxandroid:2.0.1'compile 'com.squareup.retrofit2:retrofit:2.1.0'
// 添加Retrofit2的依赖compile 'com.squareup.retrofit2:converter-gson:2.1.0'  // RxJava必须要指定返回数据类型解析器,指定gson,那么直接返回List或者Bean,Gson解析器compile 'com.squareup.retrofit2:converter-scalars:2.1.0'
// 如果RxJava服务器返回的是字符串,那么使用这个字符串解析器,字符串解析器compile 'com.squareup.retrofit2:adapter-rxjava2:2.2.0'       // retrofit2和 rxjava 结合库

1.4.LoginService 定义接口:

public interface LoginService {
// 上传头像@Multipart@POST("FileUploadServlet")Observable<String> getPicturesBean(@Part("uid") RequestBody uid, @Part MultipartBody.Part file);
}

1.5.Android代码实现:

 // 准备把 assert下 图片拷贝到sd卡中public void  sendRequestYuan(View view) throws IOException {AssetManager manager = getAssets();// 会自动去assert目录下找InputStream is = manager.open("ic_launcher.png");// 会自动打开 /data/data/packageName/file 目录FileOutputStream fos = openFileOutput("ic_launcher.png", Context.MODE_PRIVATE);//3. 边读边写byte[] buffer = new byte[1024];int len = -1;while((len=is.read(buffer))!=-1) {fos.write(buffer, 0, len);}fos.close();is.close();}/*** 文件上传Post请求*/public void uploadFile(View view) {String filesPath = getFilesDir().getAbsolutePath()+"/ic_launcher.png";Log.e(TAG,"filepath:"+filesPath);Retrofit retrofit2 = new Retrofit.Builder().baseUrl("http://192.168.168.157:8080/Web001/").addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).build();// 这个值当作token校验String uid="1010100101";File file = new File(filesPath);/**uid  用于提交普通表当,实际上传服务器可以用于携带token,ui表单格式:<form action="FileUploadServlet" method="post" enctype="multipart/form-data">用户名 <input type="text" name="name" /> <br /> <br />     // 这里用于携带普通表单照片 <input type="file" name="photo1" /> <br /> <br />    //   这里用于携带图片</form>*/RequestBody uidBody = RequestBody.create(MediaType.parse("multipart/form-data"), uid);MultipartBody.Part filePart = MultipartBody.Part.createFormData("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file));LoginService loginService= retrofit2.create(LoginService.class);loginService.getPicturesBean(uidBody, filePart).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<String>() {@Overridepublic void accept(String s) throws Exception {//  Log.e(TAG,"s:"+s);}}, new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) throws Exception {//   Log.e(TAG,"throwable:"+throwable);}});}

2. Android实现图片下载发送GET请求Token校验下载

2.1.服务器代码实现图片下载:

package com.denganzhi.project;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** Servlet implementation class DownloadServlet*/
@WebServlet("/DownloadServlet")
public class DownloadServlet extends HttpServlet {private static final long serialVersionUID = 1L;/*** @see HttpServlet#HttpServlet()*/public DownloadServlet() {super();// TODO Auto-generated constructor stub}/*** @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)*/protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(request.getParameter("uid"));//获取项目的真实路径String path =getServletContext().getRealPath("/upload");//判断路径是否存在,图片路径,是上传的图片路径File file = new File(path);File destFile=new File(path+"/"+"4fd20f4150c5497d93c8a0acb539f70a_ic_launcher.png");//获取web的上下文路径,System.out.println(destFile.getAbsolutePath());byte[] data = null;    FileInputStream fis = new FileInputStream(destFile);ByteArrayOutputStream baos = new ByteArrayOutputStream();int len;byte[] buffer = new byte[1024];while ((len = fis.read(buffer)) != -1) {baos.write(buffer, 0, len);}data = baos.toByteArray();System.out.println("data大小:"+data.length);response.getOutputStream().write(data);baos.close();fis.close();}/*** @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)*/protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoGet(request, response);}}

Android实现图片下载:

public interface LoginService {//http://localhost:8080/Web001/images/b1.png// 下载头像, 把uid携带传递上去,服务器返回数据流@GET("DownloadServlet")@StreamingObservable<ResponseBody> downloadUserHead(@Query("uid") String uid);
}

Android实现下载代码:

 public void downloadImg(View view) {Retrofit retrofit2 = new Retrofit.Builder().baseUrl("http://192.168.168.157:8080/Web001/").addCallAdapterFactory(RxJava2CallAdapterFactory.create()).addConverterFactory(GsonConverterFactory.create()).build();LoginService loginService= retrofit2.create(LoginService.class);// 携带参数,图片下载做校验loginService.downloadUserHead("uuuuiiidddd").subscribeOn(Schedulers.io()).flatMap(new Function<ResponseBody, ObservableSource<Bitmap>>() {@Overridepublic ObservableSource<Bitmap> apply(ResponseBody responseBody) throws Exception {byte[] bys = new byte[0];bys = responseBody.bytes(); //注意:把byte[]转换为bitmap时,也是耗时操作,也必须在子线程Log.e(TAG,"图片大小是:"+bys.length);final Bitmap bitmap = BitmapFactory.decodeByteArray(bys, 0, bys.length); // 在子线程中进程return Observable.just(bitmap);}}).subscribe(new Consumer<Bitmap>() {@Overridepublic void accept(Bitmap bitmap) throws Exception {homeImg.setImageBitmap(bitmap);}}, new Consumer<Throwable>() {@Overridepublic void accept(Throwable throwable) throws Exception {Log.e(TAG,"图片下载->错误是:"+throwable);}});}

源码地址: https://download.csdn.net/download/dreams_deng/12244407

Retrofit2实现图片上传下载携带token校验相关推荐

  1. 微信js-sdk图片上传下载——java完整流程

    最近做的一个项目刚好用到微信js-sdk的图片上传接口,在这里做一下总结. 在这里能知道使用js api的基本配置https://mp.weixin.qq.com/wiki?t=resource/re ...

  2. 文件 图片 上传 及少许正则校验

    文件 & 图片 上传 及少许正则校验 <template><div style="padding: 20px"><Row><Col ...

  3. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

  4. 用cn.hutool工具包进行图片上传下载示例

    文章目录 实体类 controller service 数据转换的工具类 file工具类 Hutool-http针对JDK的HttpUrlConnection做一层封装,简化了HTTPS请求.文件上传 ...

  5. Java实现七牛云文件或图片上传下载

    写在前面 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:人工智能学习网站 文章目录 写在前面 一.准备工作 1.1.为什么选择七牛云? 1.2.七牛云注册 二.ja ...

  6. ssm上传文件获取路径_SSM实现图片上传下载功能

    0. 基本步骤框架搭建 实现带图片上传的注册功能 实现下载功能 1. 框架搭建 Step1 创建开发项目 创建基础MVC包结构:controller.service.mapper.pojo Step2 ...

  7. ssm框架验证码图片加载不出_基于SSM框架的文件图片上传/下载功能实现

    前一段时间很多做毕业设计的同学问:如何写图片和文件的上传下载功能,今天正好有时间,所以就做了一个案例,详细的讲解这个功能. 框架结构: 对于很多做过开发的而言,上传功能肯定都用过,而且用到的场景很多, ...

  8. 图片上传下载-功能实现

    文件上传下载 三种方式实现文件上传功能 1. 传统form表单(基本被废弃) 向后台发送数据的三种编码格式 -form表单的enctype属性 application/x-www-form-urlen ...

  9. 第二篇 ( wcf 与 android 图片上传下载)

    老规矩废话不多说,直接入主题 注:wcf 使用rest风格,传递json数据,图片是经过base64编码,android 使用common-codec-1.5.jar 进行base64编码 服务器端 ...

最新文章

  1. 逻辑回归损失函数(cost function)
  2. 不能上网--只要四步判断出故障所在
  3. 某学校学生在计算机等级水平测试中,提高中职学校计算机等级考试(一级)通过率的教学策略研究...
  4. 题目1549:货币问题
  5. IQmath中文手册
  6. TensorFlow 莫烦视频学习笔记例子二(一)
  7. 在理解通用近似定理之前,你可能都不会理解神经网络
  8. CG CTF WEB 变量覆盖
  9. 常见的保险种类,险种分类介绍
  10. javascript中的模块系统
  11. 【dfs】【树】机器选择
  12. NOI 练手题 图像旋转翻转变换
  13. Bash:字符串操作
  14. php文件操作基本使用方法
  15. 用计算机写文章 单元备课,信息技术第一单元单元备课精要.doc
  16. python 画线条进行到指定区域更改颜色,使用Colormaps在matplotlib中设置线条的颜色...
  17. wordcount C
  18. python要背的单词_Python-默背单词
  19. wampserver mysql乱码_ajax +json +php提交mysql数据库 中文乱码(wamp server 本地测试)求解?...
  20. Delphi 包的设计思想及它与PAS、BPL、DCU、DLL、OXC的关系

热门文章

  1. 模型汇总-10 Variational AutoEncoder_变分自动编码器原理解析
  2. JAVA 游戏开发之——FPS(帧频刷新率)精准控制
  3. 基于日常工作对亚马逊云计算平台的一点认识
  4. 会打麻将的人工智能来了
  5. 01--python 中的列表list 练习题
  6. hibernate Search 继续研究 增加 hibernate memcache 二级缓存 配置成功 附件maven代码(2)...
  7. 加入 RRAM 开发战线,Sony 与 Micron 共同发表新成果
  8. JMDM液位开关/光电开关/门禁信号/红外光电开关控制器
  9. 【媒体广告】的现状与未来发展趋势!
  10. Python|游邮APP技术路线