600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > java文件上传到远端服务器

java文件上传到远端服务器

时间:2024-01-09 18:55:12

相关推荐

java文件上传到远端服务器

本文文件上传使用是RestTemplate,之前也使用过HttpURLConnection上传过,不过这种方式比较繁琐,所有最后综合使用RestTemplate。

本文案例。

项目环境:springboot+maven+mybatis

客户端代码:

import com.alibaba.fastjson.JSON;import mons.codec.digest.DigestUtils;import org.springframework.core.io.FileSystemResource;import org.springframework.http.HttpEntity;import org.springframework.http.HttpHeaders;import org.springframework.http.MediaType;import org.springframework.http.client.SimpleClientHttpRequestFactory;import org.springframework.util.LinkedMultiValueMap;import org.springframework.util.MultiValueMap;import org.springframework.web.client.RestTemplate;import java.io.File;import java.io.FileInputStream;import java.io.IOException;public class fileUpload {/*** 发送post请求远程服务器* @param serviceUrl:远程服务器接口地址* @param filePath:文件存在地址* @param fileName:文件名称* @param json:参数* @return*/public static String restTemplateTransferFilePost(String serviceUrl,String filePath,String fileName,JSON json) throws IOException {/* //大文件时SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();//这是为tru时最大为10485760字节,文件过大会抛出java.io.IOException: Error writing to server,大文件设置为falserequestFactory.setBufferRequestBody(false);RestTemplate restTemplate = new RestTemplate(requestFactory);*///小文件时RestTemplate restTemplate = new RestTemplate();//设置请求头HttpHeaders headers = new HttpHeaders();MediaType type = MediaType.parseMediaType("multipart/form-data");headers.setContentType(type);String path=filePath+"/"+fileName;String fileMd5= DigestUtils.md5Hex(new FileInputStream(new File(path)));// 建立需要上传的资源对象FileSystemResource fileSystemResource = new FileSystemResource(path);//设置请求体,注意是LinkedMultiValueMapMultiValueMap<String, Object> form = new LinkedMultiValueMap<>();// 指定上传文件所对应的字段及资源form.add("file", fileSystemResource);form.add("filename",fileName);form.add("parameterJson",json);form.add("fileMd5",fileMd5);//用HttpEntity封装整个请求报文HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);String s = restTemplate.postForObject(serviceUrl, files, String.class);return s;}

服务器代码:

服务端是自己写来测试的,代码没有精简,也可以使用MultipartFile来接收

@RequestMapping("/receive")public String receive(HttpServletRequest request, HttpServletResponse response) throws Exception {//获取参数String parameterJson=request.getParameter("parameterJson");// 判断enctype属性是否为multipart/form-databoolean isMultipart = ServletFileUpload.isMultipartContent(request);if (!isMultipart) {throw new IllegalArgumentException("上传内容不是有效的multipart/form-data类型.");}String targetPath="";try {//将当前上下文初始化给 CommonsMutipartResolver (多部分解析器)CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());//检查form中是否有enctype="multipart/form-data"if (multipartResolver.isMultipart(request)) {//将request变成多部分requestMultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;//获取multiRequest 中所有的文件名Iterator iter = multiRequest.getFileNames();while (iter.hasNext()) {//一次遍历所有文件MultipartFile file = multiRequest.getFile(iter.next().toString());if (file != null) {SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");String time = df.format(new Date());//文件上传地址:JCPTConstants.FILE_SERVER_ABS_ROOT_PATH这个是保存地址,改成自己的保存地址String path = JCPTConstants.FILE_SERVER_ABS_ROOT_PATH + time + file.getOriginalFilename();//上传file.transferTo(new File(path));//我是用是nginx,JCPTConstants.File_Server_IP+JCPTConstants.File_Server_ROOT此地址是Nginx地址,改成自己的地址targetPath=JCPTConstants.File_Server_IP+JCPTConstants.File_Server_ROOT+time + file.getOriginalFilename();response.setCharacterEncoding("UTF-8");response.getWriter().println(200);}}}}catch (Exception e){throw new IllegalArgumentException("上传失败");}return null;}

我这里使用springboot,如果是接收大文件,则需要在启动类上加上以下代码

/*** 文件上传配置* @return*/@Beanpublic MultipartConfigElement multipartConfigElement() {MultipartConfigFactory factory = new MultipartConfigFactory();//单个文件最大factory.setMaxFileSize("10240000KB"); //KB,MB/// 设置总上传数据总大小factory.setMaxRequestSize("102400000KB");return factory.createMultipartConfig();}

参考地址:

Spring Boot——多文件上传大小超限问题解决

spring的RestTemplate使用指南

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。