Springboot RestTemplate 上传文件
Springboot RestTemplate 上传文件
Springboot RestTemplate 上传文件
MultipartFile转File工具类
常用的工具类
import org.springframework.boot.autoconfigure.jms.artemis.ArtemisAutoConfiguration;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* @description: 常用的工具
* @program: toolkit
* @author: Mikael
* @date: 2021-06-10 15:36
**/
public class CommonUtil {
//默认分隔符
private static String DELIMITER = ",";
public String getDELIMITER() {
return DELIMITER;
}
public void setDELIMITER(String DELIMITER) {
this.DELIMITER = DELIMITER;
}
/**
* 把以,分割的字符串 转化为list
* @param val 分割的字符串
* @param val 分割符
* @return List<String>
*/
public static List<String> strToList(String val){
return strToList(val,DELIMITER);
}
/**
* 自定义分割的字符串 转化为list
* @param val 分割的字符串
* @param val 分割符
* @return List<String>
*/
public static List<String> strToList(String val,String DELIMITER){
String[] values = val.split(DELIMITER);
return Arrays.asList(values);
}
/**
* List 转化为String 用指定分隔符分开 默认,
* @param list
* @return String
*/
public static String listToStr(List<String> list){
return listToStr(list,DELIMITER);
}
/**
* List 转化为String 用指定分隔符分开
* @param list
* @param DELIMITER
* @return
*/
public static String listToStr(List<String> list,String DELIMITER){
return list.stream().collect(Collectors.joining(DELIMITER));
}
/**
* MultipartFile 转 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除本地临时文件
* @param file
*/
public static void deltelTempFile(File file) {
if (file != null) {
File del = new File(file.toURI());
del.delete();
}
}
}
UploadController
/**
* @description: 文件上传
* @program: toolkit
* @author: Mikael
* @date: 2021-06-17 17:05
**/
@Controller
@Slf4j
@Api("文件上传控制器")
public class UploadController {
@Value("${uploadAddress}")
private String uploadAddress;
@Autowired
RestTemplate restTemplate;
@PostMapping("/upload")
@ApiOperation(value = "上传文件接口",notes = "上传文件接口")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file){
log.info("/upload POST请求 --> 进行文件上传,参数: " + file.getOriginalFilename());
Response response = new Response();
File uploadFile = null;
try {
//设置请求头
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("multipart/form-data");
headers.setContentType(type);
//MultipartFile转File
uploadFile = CommonUtil.multipartFileToFile(file);
//设置请求参数
FileSystemResource fileSystemResource = new FileSystemResource(uploadFile);
//设置请求体,注意是LinkedMultiValueMap
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("file", fileSystemResource);
//封装
HttpEntity<MultiValueMap<String, Object>> send = new HttpEntity<>(form, headers);
//发送
response = restTemplate.postForObject(uploadAddress, send, Response.class);
} catch (Exception e) {
e.printStackTrace();
}finally {
//删除临时文件
CommonUtil.deltelTempFile(uploadFile);
}
//这里自己封装的 根据自己业务返回就行
return response.getCode().equals(ResponseEnum.SUCCESS.getCode()) ? JSON.toJSONString(response) : (String) response.getContent();
}
}
提醒一下,应为中间进行转化的时候会生成一个临时文件,temFile在这里就表示生成的临时文件,这里只是相当于一个载体,在最后进行删除就行了
上传服务器的Controller
/**
* @description: 文件上传
* @program: fileupload
* @author: Mikael
* @date: 2021-06-17 14:09
**/
@RestController
@Slf4j
public class FileUploadController {
@Value("${uploadPath}")
private String filePath;
@Value("${addressPrefix}")
private String addressPrefix;
@PostMapping("/upload")
public Response fileUpload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return new Response("500","File is empty!");
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
try {
if (!dest.exists()) dest.createNewFile();
file.transferTo(dest);
} catch (Exception e) {
e.printStackTrace();
return new Response("500","Upload Failed");
}
log.info("文件上传到 -->" + filePath + fileName);
log.info("公网地址 -->" + addressPrefix + fileName);
return new Response("200",addressPrefix+fileName);
}
}
__EOF__

本文作者:Immortal-mode
本文链接:https://www.cnblogs.com/immortal-mode/p/14898613.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/immortal-mode/p/14898613.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
标签:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!