关于dubbo微服务框架,传送文件报空的问题
2018-01-08 10:20
253 查看
关于dubbo微服务框架,传送文件报空的问题
曾经遇到使用阿里的dubbo微服务框架,在做文件上传时远程注入服务,结果发现Controller这层是有文件信息的,但是到了service层文件报空,文件丢失。(如果是直接在Controller层完成文件处理存储就好远程调用没关系了)开始认为是序列化和反序列话的问题,结果查看源码发现MultipartFile的子类CommonsMultipartFile已经实现序列化
查了资料,原来dubbo框架是不支持远程文件和流的传送。所以当文件从Controller层传送到service层的时候,文件丢失了。
解决办法:
1.网上下载别人封装好的jar包
2.最简单的把文件或者流转化为byte数组进行传送(后来发现有挺多免费的第三方图片文件保存实现也是用这种)
以下是Controller上传文件的方法,
commonCenterServiceImpl是远程注入的文件上传服务
@Reference
private CommonCenterService commonCenterServiceImpl;
@RequestMapping(value = "/image", method = RequestMethod.POST)
@ResponseBody
public AjaxResult uploadImagePost(@RequestParam("imgs") MultipartFile imgs,HttpServletRequest request,Model model) throws FileNotFoundException, IOException {
List<String>allowType=Arrays.asList("image/bmp","image/png","image/gif","image/jpg","image/jpeg","image/pjpeg");
//获取項目的路径
String path = request.getServletContext().getRealPath("/uploads");
//获取文件类型
String contentType = img.getContentType();
//判断文件是不是图片
if(allowType.contains(contentType)){
//获取上传文件的原始文件名
String oFileName=img.getOriginalFilename();
//把文件转化成byte[]
byte[] bytes = img.getBytes();
String imageUrl = commonCenterServiceImpl.uploadImagePost(bytes, path,oFileName);
return AjaxResult.me().setMessage("上传成功").setData(imageUrl );
}
}
一下是远程service服务处理保存文件的方法
@Override
public String uploadImagePost(byte[] imgs, String path,String oFileName) {
FileOutputStream fos = null;
BufferedOutputStream bos = null;
try {
//获取文件名的后缀
String fNameSuffix= FilenameUtils.getExtension(oFileName);
//生产一个随机的文件名
String uuidName = UUID.randomUUID().toString();
String fileName=uuidName+"."+fNameSuffix;
//使用file流写文件
File file=new File(path,fileName);
//判断父目录是否存在,不存在就创建
if(!file.getParentFile().exists()){
file.getParentFile().mkdirs();
}
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(imgs);
String filePath = path+File.separator+fileName;
return filePath;
} catch (Exception e) {
e.printStackTrace();
return null;
}finally {
try {
if (bos != null) {
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
相关文章推荐
- 关于dubbo服务的xml配置文件报错的问题
- 关于DUBBO服务的XML配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题--The matching wildcard is strict, but no declaration can be found for element
- 【java】关于Dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- 关于dubbo服务的xml配置文件报错的问题
- BLUENESSG 早一日受苦、早一日解决、早一日浴火重生 Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
- 关于服务程序生成文件存放在哪的问题
- 关于Mac Pro蓝牙接收移动设备传送文件的问题
- maven 工程 dubbo服务的xml配置文件报错的问题
- Maven多模块,Dubbo分布式服务框架,SpringMVC,前后端分离项目,基础搭建,搭建过程出现的问题
- dubbo服务的xml配置文件报错的问题
- 关于IIS服务启动失败的问题:“IIS提示‘另一个程序正在使用此文件,进程无法访问’”,的解决方法
- 关于SSH框架文件上传到服务器自动删除问题的解决方法。