一、CommonsMultipartFile
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
@Test
public void testOSSServiceImport(){
File file = new File("test.png");
DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
MediaType.ALL_VALUE, true, file.getName());
try (InputStream input = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()) {
IOUtils.copy(input, os);
} catch (Exception e) {
throw new IllegalArgumentException("Invalid file: " + e, e);
MultipartFile multi = new CommonsMultipartFile(fileItem);
二、mockFile
pom引入spring-test
spring-boot-starter-test中包含spring-test相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
import org.springframework.mock.web.MockMultipartFile;
MultipartFile file = new MockMultipartFile(name,name, MediaType.MULTIPART_FORM_DATA_VALUE, inputStream);
三、从网络url中操作zipFile
网络text文件为pdf和流水号的映射
20211013_7935015_001_15000001903734_1634117754785_0.pdf 8043432110131215777753
20211013_7935016_008_15000001903734_1634117754402_0.pdf 8043432110131215777753
zip中的pdf文件
1、从网络text文件中获取pdf和流水号的映射,存入到HashMap中。
2、从对应的流水号中取出对应的pdf文件名。
3、通过pdf文件名从Zip文件中取出pdf文件,并包装成MultipartFile,用于文件上传到文件服务器。
引入commons-io或commons-fileupload 的maven依赖
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
ZipFileUtils 工具类
public class ZipFileUtils {
private static final Logger logger = LoggerFactory.getLogger(ZipFileUtils.class);
* 获取网络文件流
* @param urlStr 网络文件url
* @return 返回输入流
* @throws IOException IO异常
private static InputStream downLoadFromUrl(String urlStr) throws IOException {
URL url = new URL(urlStr);
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
//设置超时间为3秒
conn.setConnectTimeout(3*1000);
//防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
//得到输入流
return conn.getInputStream();
* 获取网络文件流中的内容,一次读一行,并将空格拆开,返回
* @param urlStr 网络文件url
* @return 返回pdf文件名和银行流水号映射集合
* @throws IOException IO异常
public static Map<String,List<String>> downLoadFileContentFromUrl(String urlStr) throws IOException {
Map<String, List<String>> resultMap = new HashMap<>();
InputStream inputStream = null;
BufferedReader br = null;
try {
//得到输入流
inputStream = downLoadFromUrl(urlStr);
//构造一个BufferedReader类来读取文件
br = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
String line = null;
//使用readLine方法,一次读一行
while ((line = br.readLine()) != null) {
//通过空格进行切分
String[] split = line.split(" ");
if(split.length >= 2){
List<String> pdfNameList = resultMap.get(split[1]);
if(CollectionUtils.isEmpty(pdfNameList)){
pdfNameList = new ArrayList<>();
pdfNameList.add(split[0]);
resultMap.put(split[1],pdfNameList);
}else{
pdfNameList.add(split[0]);
} finally {
//关闭流
if(br != null){
br.close();
if(inputStream != null){
inputStream.close();
return resultMap;
* 根据pdfName名称,从网络中获取Zip中的pdf文件InputStream
* @param urlStr Zip文件的下载url
* @param pdfName pdf名称
* @return 返回输入流
* @throws IOException IO异常
public static InputStream downLoadZipFileFromUrl(String urlStr,String pdfName) throws IOException {
//声明字节输出数组
ByteArrayOutputStream byteOut = null;
ZipInputStream zipIn = null;
InputStream inputStream = null;
try {
//得到输入流
zipIn = new ZipInputStream(downLoadFromUrl(urlStr));
ZipEntry entry = null;
while ((entry = zipIn.getNextEntry()) != null) {
if(pdfName.equals(entry.getName())) {
//初始化字节输出数组
byteOut = new ByteArrayOutputStream();
IOUtils.copy(zipIn, byteOut);
inputStream = new ByteArrayInputStream(byteOut.toByteArray());
return inputStream;
} finally {
//关闭流
if(byteOut != null){
byteOut.close();
if(zipIn != null){
zipIn.close();
* 根据pdfName名称,从网络中获取Zip中的pdf文件的MultipartFile
* @param urlStr Zip文件的下载url
* @param pdfName Zip文件的下载url
* @return MultipartFile
* @throws IOException IO异常
public static MultipartFile getMultipartFileFromUrl(String urlStr, String pdfName) throws IOException {
String fileName = "Xxx文件.pdf";
MultipartFile multipartFile = null;
InputStream inputStream = downLoadZipFileFromUrl(urlStr, pdfName);
if(inputStream != null){
File file = new File(fileName);
DiskFileItem fileItem = (DiskFileItem) new DiskFileItemFactory().createItem("file",
MediaType.ALL_VALUE, true, file.getName());
try (OutputStream os = fileItem.getOutputStream()) {
IOUtils.copy(inputStream, os);
} catch (Exception e) {
logger.error("输入流转DiskFileItem异常");
throw new IllegalArgumentException("Invalid file: " + e, e);
multipartFile = new CommonsMultipartFile(fileItem);
return multipartFile;