公司是做APP的,进公司一年了还是第一次做安卓的接口

安卓是使用OkGo.post("").addFileParams("key",File);

通过这种方式传输图片,就与html前台传是一样的处理方式,直接用 MultipartFile 对象接收就好了。

还有需要注意的,使用接收安卓传来的字段属性,需要使用原始类型(int,String,byte,boolean),不能使用自己定义的对象去接收。

好了,废话不说直接上代码。

package com.ccs.ssmis.app.opinion.controller;

import com.ccs.ssmis.app.opinion.entity.OpFeedback;
import com.ccs.ssmis.app.opinion.service.OpFeedbackService;
import com.ccs.ssmis.common.support.dto.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import java.util.List; /**
* 意见反馈信息
* @author jushr
* @date 2018-03-05
*/
@CrossOrigin(value = "*",maxAge = 3600)
@Controller
@RequestMapping("/home/opinion/")
public class OpFeedbackController { @Autowired
private OpFeedbackService opFeedbackService; /**
* 1.添加意见反馈信息
* @param fileList 图片集合
* @param userId 用户编号
* @param content 反馈内容
* @param type 反馈类型
* @param contactWay 联系方式
* @param ext1 备用字段
* @param ext2 备用字段
* @return
* @throws Exception
*/
@RequestMapping(value = "/addOpFeedback", method = RequestMethod.POST)
@ResponseBody
public Result addOpFeedback(List<MultipartFile> fileList,String userId,String content,
String type,String contactWay,String ext1, String ext2) throws Exception {
OpFeedback opFeedback = new OpFeedback(userId,content,type,contactWay,ext1,ext2);
return opFeedbackService.addOpFeedback(opFeedback,fileList);
} /**
* test 测试接口,测试是否能接到图片集合
* @param fileList
* @param userId
* @return
*/
@RequestMapping(value = "/testFiles", method = RequestMethod.POST)
@ResponseBody
public Result testFiles(List<MultipartFile> fileList, String userId) throws Exception { try {
System.out.println("userId=="+userId);
System.out.println(fileList);
for (MultipartFile f:fileList) {
System.out.println("getName=="+f.getContentType());//获取图片类型
System.out.println("getName=="+f.getOriginalFilename());//获取图片名称
// System.out.println("getPath=="+f.getPath());
} return new Result(true,"成功");
}catch (Exception e){
return new Result(false,"失败");
}
} }

下面是关于图片及其他信息的存储及其他处理的代码

package com.ccs.ssmis.app.opinion.service.impl;

import com.ccs.ssmis.app.opinion.dao.OpFeedbackMapper;
import com.ccs.ssmis.app.opinion.dao.PictureMapper;
import com.ccs.ssmis.app.opinion.entity.OpFeedback;
import com.ccs.ssmis.app.opinion.entity.Picture;
import com.ccs.ssmis.app.opinion.service.OpFeedbackService;
import com.ccs.ssmis.common.support.db.DataSource;
import com.ccs.ssmis.common.support.dto.Result;
import com.ccs.ssmis.common.utils.Constants;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import java.io.File;
import java.text.SimpleDateFormat;
import java.util.*; @Service
public class OpFeedbackServiceimpl implements OpFeedbackService { private Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired
private OpFeedbackMapper opFeedbackMapper; @Autowired
private PictureMapper pictureMapper; @Override
@DataSource("dataSourceORACLE")
public Result addOpFeedback(OpFeedback opFeedback, List<MultipartFile> fileList)throws Exception {
opFeedback.setId("OPFE-"+UUID.randomUUID().toString().toUpperCase());
opFeedback.setIsDelete("1");//默认正常
opFeedback.setCreTime(new Date());//默认当前时间创建
// opFeedback.setCreUserId("");//创建人编号。默认空 待完善
int add = opFeedbackMapper.addOpFeedback(opFeedback);//添加意见反馈信息
if (add > 0){
List<Picture> fuJianList = new ArrayList<Picture>();
int i=0;
try {
if (null!=fileList){
for (MultipartFile file:fileList) {
String fileName =file.getOriginalFilename();//获取图片名称
if (!file.isEmpty()) {
if (file.getSize() > Constants.fujian_size * 1024 * 1024) { //现在附件上传最大为15M
return new Result(false, "图片大小超过15M","图片大小超过15M");
}
String filename = file.getOriginalFilename();
String type = filename.substring(filename.lastIndexOf('.')); if (!StringUtils.isEmpty(Constants.Picture_types) && Constants.Picture_types.indexOf(type) == -1) {
return new Result(false, "图片类型不正确");
} SimpleDateFormat formater = new SimpleDateFormat("yyyy");
String path = "/"+formater.format(new Date())+"/"+opFeedback.getId()+"/";
String rfilename = getName(fileName);//生成文件名
Picture picture = new Picture(opFeedback.getId(),filename,path+"/"+rfilename,type,i);//
picture.setId("OPPI-"+UUID.randomUUID().toString().toUpperCase());//图片id
picture.setCreTime(new Date());//默认创建时间
// picture.setCreUserId("");//创建人编号。默认空 待完善 String realPath=Constants.Picture_path+path;//图片存储绝对路径
//上传图片
FileUtils.copyInputStreamToFile(file.getInputStream(), new File(realPath + getFolder(realPath), rfilename));
add = pictureMapper.addOpinionPicture(picture);
if (add > 0){
fuJianList.add(picture);
}
}
i++;
}
if (fuJianList.size() > 0) {
return new Result(true, fuJianList,"反馈成功");
} else {
return new Result(false, null,"反馈失败");
}
}
}catch (Exception e){
e.printStackTrace();
logger.error("==========意见反馈上传图片时发生异常,addOpFeedback===========================",e);
return new Result(false, null,"反馈异常");
}
} return new Result(true, null,"反馈成功");
} /**
* 依据原始文件名生成新文件名
*
* @return
*/
private String getName(String fileName) {
Random random = new Random();
return "" + random.nextInt(10000) + System.currentTimeMillis() + this.getFileExt(fileName);
} /**
* 获得文件扩展名
*
* @param fileName
* @return
*/
private String getFileExt(String fileName) {
return fileName.substring(fileName.lastIndexOf("."));
} private String getFolder(String realPath) { File dir = new File(realPath);
if (!dir.exists()) {
dir.mkdirs();
}
return "";
}
}

 本博客是本人原创 转载请注明来处 谢谢。

链接地址:http://www.cnblogs.com/richard-ju/p/L2018001.html

java SpringWeb 接收安卓android传来的图片集合及其他信息入库存储的更多相关文章

  1. Xamarin.Android 入门之:Bind java的jar文件+Android显示gif图片

    一.引言 在xamarin开发的时候,有时我们想要做一个功能,但是这个功能已经有人用java写好了,并且打包成了jar文件.那么我们可以直接把对方的jar文件拿过来用而不是重新用c#写代码. 关于bi ...

  2. Java乔晓松-android中获取图片的缩略图(解决OutOfMemoryError)内存溢出的Bug

    由于android获取图片过大是会出现内存溢出的Bug 07-02 05:10:13.792: E/AndroidRuntime(6016): java.lang.OutOfMemoryError 解 ...

  3. Android中将一个图片切割成多个图片

    有种场景,我们想将一个图片切割成多个图片.比如我们在开发一个拼图的游戏,就首先要对图片进行切割. 以下是封装好的两个类,可以实现图片的切割.仅供参考和学习. 一个是ImagePiece类,此类保存了一 ...

  4. android Java BASE64编码和解码二:图片的编码和解码

    1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.a ...

  5. Java乔晓松-android中调用系统拍照功能并显示拍照的图片

    android中调用系统拍照功能并显示拍照的图片 如果你是拍照完,利用onActivityResult获取data数据,把data数据转换成Bitmap数据,这样获取到的图片,是拍照的照片的缩略图 代 ...

  6. 【Android】安卓中常用的图片加载方法

    一.通过相机选图片: 布局文件: <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

  7. 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)

    在开发安卓应用中避免不了要使用到网络图片,获取网络图片很简单,但是需要付出一定的代价——流量.对于少数的图片而言问题不大,但如果手机应用中包含大量的图片,这势必会耗费用户的一定流量,如果我们不加以处理 ...

  8. android 73 下载图片

    package com.ithiema.imageviewer; import java.io.InputStream; import java.net.HttpURLConnection; impo ...

  9. java微信开发之接受消息回复图片或者文本

    上回说到 接口连接成功,接下来是真正的开发了. 消息的接收,整个过程就是关注订阅号的用户在微信订阅号中发送消息,微信服务器接收到消息,将消息发给开发者的服务器,服务器接收消息然后可以根据内容进行回复. ...

随机推荐

  1. mongoDB高级查询$type4array使用解析

    今天在使用mongoDB高级查询$type:符号 -- 4代指Array类型发现一个问题. $type符号: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. 下面是mong ...

  2. SpringBoot入门Demo

    前言:相信做java后台编程的童鞋都知道Spring家族,Spring作为我们项目中必备的框架.JavaSpringBoot号称javaEE的颠覆者,这引起了本Y的好奇,这才花费了一点时间,学习了下s ...

  3. Mac通过brew安装reds、memcached

    redis brew install php70-redis 配置文件: /usr/local/etc/php/7.0/conf.d/ext-redis.ini memcached brew inst ...

  4. Dynamics 365 Online-多选域

    参与过Dynamics CRM相关工作的朋友们都知道,Dynamics 365之前并没有多选域字段,想要实现多选域,需要自己添加WebResource定制,而这也带来了一系列需要考虑的情况,比如额外的 ...

  5. Date 类 02

    Date类 在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理.这里简单介绍一下Date ...

  6. 3道acm简单题(2011):1.判断是否能组成三角形;2.判断打鱼还是晒网;3.判断丑数。

    //1.输入三个正整数A.B.C,判断这三个数能不能构成一个三角形.//思路:最小的两边之和是否是大于第三边#include<iostream>#include<algorithm& ...

  7. 《android开发艺术探索》读书笔记(十二)--Bitmap的加载和Cache

    接上篇<android开发艺术探索>读书笔记(十一)--Android的线程和线程池 No1: 目前比较常用的缓存策略是LruCache和DiskLruCache,LruCache常被用作 ...

  8. zoj 3962 Seven Segment Display 数位dp

    非常好的一个题,可以比赛时想到的状态太奇葩,不方便转移,就一直没能AC. 思路:dp(i, j)表示已经考虑了前i位,前i位的和为j的贡献.如果当前的选择一直是最大的选择,那么就必须从0~下一位的最大 ...

  9. 王垠:我和Google的故事

    也许有人看见过我批判 Google 的那篇英文文章.它好像有一部分片面性,所以被我从英文博客上拿下来了.我一直在反思自己在 Google 的经历,因为在这个公司工作总是感觉不对劲,但是却总也说不清楚为 ...

  10. Java版2048

    功能要求:2048的基本界面,能够实现2048的游戏功能. 总思路:两个类:Game和GameListener. Game负责界面的实现和paint方法的重写 GameListener负责实现键盘和鼠 ...