Java 上传附件后端接口大体流程和逻辑

Java 上传附件 ,后端接口大体逻辑。

所谓的附件,即包括我们常见的图片、各类文档、压缩包等等

上传附件是我们日常开发过程中,经常遇到的一个场景,也是我们Java后端程序猿必须要会的,今天周五,事情做完,离下班还有点时间,来水水大体思路。

本文顺序将主要讲述的是 controller 层和 service层的数据逻辑处理 ,废话不多说,开始我们的水贴,啊不,是技术之旅。

 

-----------------------------------------------  系统提示:后端正在开启上传接口 ----------------------------------------------- 

 

controller层

        /**
         * 上传认证信息文件
         * @param request
         * @return
         */
        @RequestMapping(value="/uploadFile",method = RequestMethod.POST,produces= MediaType.APPLICATION_JSON_VALUE)
        public Result<Boolean> uploadAuthAttachment(@RequestParam("customerId")String customerId,
                @RequestParam MultipartFile[] files, HttpServletRequest request, HttpServletResponse response) {
            return getResult(Result.OK, iUploadFileService.uploadAuthAttachment(customerId, files, request, response));
        }

返回值 Result<T> 这个是我们项目中封装的一个返回对象,可以根据实际业务进行修改;

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附件上传后端接口的一套流程,对此就不再一一细节展开,望谅解。

  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值