Java 上传附件 ,后端接口大体逻辑。
所谓的附件,即包括我们常见的图片、各类文档、压缩包等等
上传附件是我们日常开发过程中,经常遇到的一个场景,也是我们Java后端程序猿必须要会的,今天周五,事情做完,离下班还有点时间,来水水大体思路。
本文顺序将主要讲述的是 controller 层和 service层的数据逻辑处理 ,废话不多说,开始我们的水贴,啊不,是技术之旅。
----------------------------------------------- 系统提示:后端正在开启上传接口 -----------------------------------------------
controller层
/**
* 上传认证信息文件
* @param request
* @return
*/
@RequestMapping(value="/uploadFile",method = RequestMethod.POST,produces= MediaType.APPLICATION_JSON_VALUE)
public Result uploadAuthAttachment(@RequestParam("customerId")String customerId,
@RequestParam MultipartFile[] files, HttpServletRequest request, HttpServletResponse response) {
return getResult(Result.OK, iUploadFileService.uploadAuthAttachment(customerId, files, request, response));
}
返回值 Result
customerId 为前端传入的客户ID,是除了附件信息外的附带参数;
files 是当前上传的附件对象,因为当前参数文件对象是数组,所以支持同时上传多个的;
service层
service 接口
/**
* 上传附件示例
* @return
*/
public Boolean uploadAuthAttachment(String customerId, MultipartFile[] files, HttpServletRequest request, HttpServletResponse response);
service 接口实现类 impl
/**
* 上传附件示例
* @return
*/
public Boolean uploadAuthAttachment(String customerId, MultipartFile[] files, HttpServletRequest request, HttpServletResponse response){
try{
/**
* 省略附件上传前的业务处理逻辑
* 比如结合传入的其他参数(例如当前的 customerId) 做一些数据有效性校验等
*/
//附件保存逻辑
String filename=null;
if(files==null||files.length<1){
throw new Exception("文件未上传");
}else{
String rootOriPath = "服务器中的保存路径";
//循环上传上来的附件数组,保存到服务器指定的路径下
for (int i = 0; i < files.length; i ++ ) {
MultipartFile myfile=myfiles[i];
//服务器中存储的文件名
filename=new StringBuilder().append(System.nanoTime()).append(new Random().nextInt(100)).append(".").append(myfile.getContentType().substring(myfile.getContentType().indexOf("/") + 1)).toString();
File file = new File(rootOriPath);
if(!file.exists()){
file.mkdirs();
}
//文件保存至服务器指定路径下
org.apache.commons.io.FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(rootOriPath, filename));
/***
* 省略上传后的逻辑,
* 比如保存附件信息至附件表中,建立附件和我们业务的关联关系等
*
* MultipartFile 中可以获取到的一些常用的信息:
* 文件大小:myfile.getSize()
* 文件类型:myfile.getContentType()
* 文件原始名称:myfile.getOriginalFilename()
*
* 其余信息的获取方法可以通过百度 MultipartFile 找到对应的Api
*
*/
}
}
return true;
} catch (Exception e) {
e.printStackTrace();
throw new SystemException("上传附件出现异常!" + e);
}
}
前端调用时,需要传入附带参数 customerId,文件对象 files,如下图 PostMan请求示例所示:
以上为 文件上传接口 后端大体的逻辑及思路“实现”。
当然,这只是附件上传的简陋Demo版本,主要是为了展现后端附件上传的大体思路和部分通用逻辑处理,具体开发过程中肯定还需要结合 接口访问权限、数据校验、设置允许上传的附件大小、附件压缩等等安全性和细节性的处理,那些需要根据不同的业务场景做出不同的处理实现,本文目的主要为展示Java附件上传后端接口的一套流程,对此就不再一一细节展开,望谅解。