文件上传
一、服务消费者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
"XNHYHKNLM[KNLM[
|