图片链接url转MultipartFile

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @Author: jingwenjuan
 * @Description: url转成MultipartFile
 */
@Slf4j
public class UrlToMultipartFile {

    /**
     * inputStream 转 File
     */
    public static File inputStreamToFile(InputStream ins, String name) throws Exception{
        //System.getProperty("java.io.tmpdir")临时目录+File.separator目录中间的间隔符+文件名
        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
//        if (file.exists()) {
//            return file;
//        }
        OutputStream os = new FileOutputStream(file);
        int bytesRead;
        int len = 8192;
        byte[] buffer = new byte[len];
        while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
            os.write(buffer, 0, bytesRead);
        }
        os.close();
        ins.close();
        return file;
    }

    /**
     * file转multipartFile
     */
    public static MultipartFile fileToMultipartFile(File file) {
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem item=factory.createItem(file.getName(),"text/plain",true,file.getName());
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try {
            FileInputStream fis = new FileInputStream(file);
            OutputStream os = item.getOutputStream();
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new CommonsMultipartFile(item);
    }

    /**
     * url转MultipartFile
     */
    public static MultipartFile urlToMultipartFile(String url) throws Exception {
        File file = null;
        MultipartFile multipartFile = null;
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
            httpUrl.connect();
            file = UrlToMultipartFile.inputStreamToFile(httpUrl.getInputStream(),"template.png");
            log.info("---------"+file+"-------------");

            multipartFile = UrlToMultipartFile.fileToMultipartFile(file);
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return multipartFile;
    }

}

jar包

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>

测试

@ApiOperation("批量上传图片")
    @PostMapping("/uploadImgs")
    public ApiResultDto<List<UploadBack>> uploadImgs(@Valid @RequestBody UploadParam param) throws Exception {
        List<String> urls = param.getUrls();
        List<UploadBack> backs = new ArrayList<>();
        if (!CollectionUtils.isEmpty(urls)) {
            System.out.println("----------"+urls.size());
            urls.forEach(url-> System.out.println("图片链接-------"+url+"---------"));
            for (String url : urls) {
                MultipartFile file = UrlToMultipartFile.urlToMultipartFile(url);
                ApiResultDto<UploadBack> res = uploadToALi(file, param);
                if(res.getCode().equals(200)) {
                    backs.add(res.getData());
                }else{
                    return new ApiResultDto<>(400,"上传失败!");
                }
            }
            backs.forEach(back-> System.out.println("----本地图片地址---"+back+"--------"));
        }else{
            log.info("---------没有图片链接--------"+urls);
        }

        return new ApiResultDto<>(backs);
    }

    @ApiOperation("上传文件")
    @PostMapping("/uploadFile")
    public ApiResultDto<UploadBack> uploadToALi(MultipartFile file,@Valid  UploadParam param) throws IOException {
        InputStream inputStream = file.getInputStream();
        param.setUploadTime(new Date());
        param.setFileName(file.getOriginalFilename());
        String dataUrl = fileUploadService.uploadToOSS(inputStream, param).getData();
        System.out.println("-----------URL----------"+dataUrl);

        return articleService.addAttachment(param.getArticleId(),dataUrl,param.getUploadType(),file.getOriginalFilename());
    }
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值