springcloud feign前后端分离实现文件上传下载

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-23 01:06   46   0

文件上传

一、服务消费者Controller

package com.biddingportal.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.biddingportal.model.annextem.query.AnnexItemQuery;
import com.biddingportal.model.attachme.query.AttachmeQuery;
import com.biddingportal.model.commons.Result;
import com.biddingportal.service.AttachmeFeignClinent;
import feign.Response;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;

@RestController
@CrossOrigin(origins = "*",maxAge = 3600) //解决跨域
@RequestMapping("/attachmeController")
public class AttachmeController {

    private Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private AttachmeFeignClinent attachmeFeignClinent;

    /*附件文件上传
    *
    * */
    @PostMapping(value = "/multifileUpload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public Result upload(@RequestParam("file") MultipartFile file ,
                         @RequestParam("projectId") String projectId,
                         @RequestParam("user" ) String user) throws Throwable {

            //通过远程访问,访问bidding系统
            String result = attachmeFeignClinent.upload(file,projectId,user);
            //把json字符串转化成javabean对象
            Result resultObj = JSONObject.parseObject(result,Result.class);
            //输入日志
            logger.info("上传附件成功");
            //返回结果
            return resultObj;

    }


 /*
    * 附件文件下载,这里需要返回ResponseEntity<byte[]>对象,而feignClient是通过Response
      来接收服务提供者方返回的文件
    * */
    @PostMapping("/downloadAttachem")
    public ResponseEntity<byte[]> downloadAttachme(@RequestBody AttachmeQuery attachmeQuery) throws Throwable {
        //获取附件文件id
        String attachmeId = attachmeQuery.getAttachmeId();
        //获取附件文件名
        String filename = attachmeQuery.getFileName();
       logger.info("使用feign调用服务 文件下载");
        ResponseEntity<byte[]> result = null;
        InputStream inputStream = null;
        try {
            // feign文件下载
            Response response = attachmeFeignClinent.downloadAttachme(attachmeId);
            Response.Body body = response.body();
            inputStream = body.asInputStream();
            //创建字节数组,由于存放附件
            byte[] b = new byte[inputStream.available()];
            //输入流读取字节数组
            inputStream.read(b);
            /*设置响应头
            1.设置CONTENT_DISPOSITION
            2.设置CONTENT_TYPE
            * */
            HttpHeaders heads = new HttpHeaders();
            heads.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+filename);
            heads.add(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
            result = new ResponseEntity<byte[]>(b, heads, HttpStatus.OK);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        logger.info("附件文件下载成功");
        return result;
    }



}

feginClient端

package com.biddingportal.service;
import com.biddingportal.service.impl.AttachmeFeignClinentImpl;
import feign.Response;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;



@FeignClient(name = "bidding",fallback = AttachmeFeignClinentImpl.class)
public interface AttachmeFeignClinent {

    /*
     * 附件上传保存
     * */
    @PostMapping(value = "/attachmeController/multifileUpload",consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String upload(@RequestPart("file") MultipartFile file,
                  @RequestParam("projectId") String projectId,
                  @RequestParam("user" ) String user)throws Throwable;

    /*
    * 附件下载
    * 通过Response来接收文件流
    * */
    @PostMapping("/attachmeController/downloadAttachem")
    Response downloadAttachme(@RequestBody String attachemId) throws Throwable;
}

//FeignClinentImpl类

package com.biddingportal.service.impl;

import com.biddingportal.service.AttachmeFeignClinent;
import feign.Response;
import org.springframework.stereotype.Component;
import org.springfrb	\^

KNH
^[JH]\[BBBOO.8#yby\nml!kf9b,9l9knH\HHOXYKY[\[\KY[[[[^[K]Y\K[^][T]Y\N[\KY[[[[^[K[^][U[\KY[[[]XYK]Y\K]XYT]Y\N[\KY[[[]XYK]XYU[\KY[[[[[\[\KY[X[^][TX[\KY[X]XYTX[\[\XN[\[[Y]X[˙XK[][]]\Y[\[[Y]YYXU\N[\[[Y]][\\][[\[[Y][[][[\[[Y]][\\][\\[N[\]^]]\[\]K[ˊ[\]K[˙[K[\[\]K[˙[K][\]K[˙[K][\]K][\\YYNX^Y	N
H)\]Y\X\[]XYP\XX\]XYP\]]H	NXK\˙\
JN	]\Y]]H]XYTX]XYTX	]\Y]]H[^][TX[^][TX
	\[H[B
	\[HXY
	]\
	
	X\[[YH	N][Y[U\	Y\NYYXU\KUSTTWUWSQJBXX\\
	\]Y\\
	[I][\\[H[K	\]Y\\[J	XY	[XY	\]Y\\[J	H[\HXH]XYT]Y\H]XYT]Y\H	N]]XYT]Y\J
N#ny.yoeB[H]	N[H]	N][J\\][˙T
	\]]

JNH
[S^[JHK[XX
NBB\\	N]\

N+fa9.f9oeB[\]	N[]		]X[KXY	[\]
Nb)9zfa9.+.Y
X\[
[JH[K\\J
JH\	.]\\Z[

L	hy..BH]V]\N[K]\N]]	N]˙
\]	[KY[[[[YJ
JNi9y"Y[\.Ib&yb&Y
Q[\\]XJ]
JH[\X]Q\XY\]˙
\]
JNByaiy![\]J]]\XYyaiy$9bH
S[JHK[XX
N]\\Z[

L	 n.	Bfa9.[]XYRY	NURQ[URQ

K[K\X[
		fa9.f:-[]	N\][[S[YH	N[KY[[[[YJ
N)y/k9h[H	N[[H	N[
H[KJ
NYI

M^H	N[[YSK

MIY[Y
I
^H	N[[YSJIY[H	N[[YSK
IB[[S[YH		IJN[[U\H	N[K[\J
N#n]XYT]Y\K]XYRY
]XYRY
N]XYT]Y\K[U\
]
N]XYT]Y\K[S[YJ[S[YJN]XYT]Y\K[U\J[U\JN]XYT]Y\K[TJJN]XYT]Y\K\[[J\N]XYT]Y\K\[YJ]]J
JN/f:fa9.l9kneB\	N]XYTXP]XYJ]XYT]Y\JN[9oeymf9b,9l9kn\\H	N]\

NY]\H	NN
^[^][T]Y\H[^][T]Y\H	N][^][T]Y\J
N[^][T]Y\K[][[][Y
XY
N[^][T]Y\K]XYRY
]XYRY
N\H	N[^][TXP[^][J[^][T]Y\JN[l9oeymf	B]\\KZ[
	9$9bBOOOc fkd﹣IXN"/(	XNHYH]\]XK]Z[
L
]\]XK]Z[
L
"XNHYHKNLM[KNLM[
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP