Magic-api 升阶,response,request 文件上传下载的处理
按照官方文档。
request、response的处理
介绍的很笼统。
查了一下网上的资料,确实可用的比较少。正好项目有excle 上传下载,图片的上传,花了一个礼拜研究了一下,部分源码,所以为了节约开发coder的时间。将我的应用讲一个大概的思路,就不会迷糊了。
有两个方向:
第一个是magicapi自带的部分封装接口,是在慢慢后面研究中发现的,对response、request做了封装。如下图,没用过。
第二个是直接使用response、request。就直接实现了。
第一步。首先按照官方文档。基本不能满足自己的业务需求。
业务需求,导出EXCLE,需要用到getOutputStream 这个api
这是源码里面的对象。 拿到这个对象之后,返回OutputStream对象。
第二步:
编写自定义函数了。
下面就是java的实现, 同上直接上java代码和完整的magic-api脚本。当然有自定义的java工具类,网上示例代码很多,就不上了。
@Component
@Slf4j
public class FileCustomModule implements MagicModule, CustomModule {
@Override
public void downloadExcle(OutputStream os, List titles, List values) throws Exception {
try {
if (CollectionUtils.isEmpty(values)) {
values = new ArrayList();
}
ExcelUtil.exportExcel(os, titles, values);
} catch (Exception e) {
log.error("download method error", e);
}
}
@Override
public List upExcle(MultipartFile quest) {
try {
return ExcelUtil.getFileData(quest);
} catch (Exception e) {
log.error("download method error", e);
}
return null;
}
@Override
public List upPicture(List<MultipartFile> quests, String path) {
List listReturn = new ArrayList();
try {
String name, fullName;
if (CollectionUtils.isEmpty(quests)) {
return listReturn;
}
for (MultipartFile quest : quests) {
name = quest.getOriginalFilename();
fullName = FileCustomUtil.writeFile(quest.getInputStream(), path + name);
listReturn.add(fullName);
}
return listReturn;
} catch (Exception e) {
log.info("error=>", e);
}
return listReturn;
}
@Override
public String getModuleName() {
return "file";
}
public static void main(String[] args) {
String a = "[2022-01-25_1643091918939_自动引入插件核心机制.png]";
String phoneIdList = StringUtils.strip(a, "[]");
List l = Arrays.asList(phoneIdList.split(","));
System.out.println(l);
}
}
import response;
import request;
import file;
import log;
import "java.net.URLEncoder"
import "org.apache.commons.lang3.StringUtils";
import "com.alibaba.fastjson.JSONObject";
var fileName="维保记录_"+date_format(new Date(),"yyyy-MM-dd");
fileName=URLEncoder.encode(fileName, "UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
return file.downloadExcle(response.getOutputStream(),title,resultValues);
放出部分java代码和完整的magic-pai脚本。
以上是excle导出。可以换成PDF/CVS等。
第二个需求是导入excle了。
同上java代码和完整的magic-api脚本。当然有自定义的java工具类。
import "com.alibaba.fastjson.JSONObject";
import response;
import request;
import file;
import log;
import "java.lang.String";
import "org.apache.commons.lang3.StringUtils";
import "org.springframework.util.CollectionUtils";
import "java.util.UUID";
import "java.lang.StringBuffer";
var quest=request.getFile("file")
var resultList=file.upExcle(quest);
log.info("resultList {}",resultList)
第三个需求,图片上传,java代码同上。
import file;
import log;
import "java.lang.String";
import "org.apache.commons.lang3.StringUtils";
import "org.springframework.util.CollectionUtils";
import "java.util.UUID";
import "java.lang.StringBuffer";
var suf=date_format(new Date(),"yyyy-MM-dd");
var pathWindows="C:\Users\Longshine\Desktop\mqtt_test\picture\\"+suf;
var pathLinux="/app/bigscreen_picture/"+suf;
var quest=request.getFiles("file");
var name=file.upPicture(quest,pathLinux);
log.info("name {}",name);
log.info("name1 {}",name);
return name;
以上是大概的一个思路,其他的java具体的文件实现类太多了。就不写上去了。 欢迎留言。