精华内容
下载资源
问答
  • 主要为大家详细介绍了利用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了SpringMVC 上传文件 MultipartFile 转为 File的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要为大家详细介绍了SpringMVC使用MultipartFile实现文件上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了Java利用MultipartFile实现上传多份文件的代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 本篇文章主要介绍了SpringMVC中MultipartFile上传获取图片的宽度和高度,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • java POI 通过MultipartFileExcel文件解析写入数据库
  • 本文给大家带来了解决springboot MultipartFile文件上传遇到的问题,解决方法超简单,感兴趣的朋友参考下本
  • 主要为大家详细介绍了纯js实现最简单的文件上传功能,后台使用MultipartFile,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • MultipartFile上传图片(多图片上传)
  • 多文件上传MultipartFile

    2018-12-15 09:43:24
    本次带来的是MultipartFile多文件文件上传,可以在sql执行完成,没有出现异常,再将文件保存进我们的服务器,如果出现异常,文件不会上传到我们的服务器
  • 主要为大家详细介绍了Java原生服务器接收上传文件,不使用MultipartFile类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • File 转 MultipartFile 和需要的maven配置File 转 MultipartFile 和需要的maven配置File 转 MultipartFile 和需要的maven配置
  • 本地生成file文件 MultipartFile转为file,获取时长(毫秒),换算毫秒为时分秒 删除本地的file文件
  • NULL 博文链接:https://paggywong.iteye.com/blog/1022725
  • Android上传单文件和多文件(后台使用MultipartFile),博客地址:https://blog.csdn.net/qq_32090185/article/details/86573530
  • 本篇文章主要介绍了SpringMVC使用MultipartFile实现文件的上传,本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的,有兴趣的可以了解一下。
  • 主要介绍了SpringMVC使用MultipartFile 实现异步上传方法介绍,涉及pom依赖的添加,配置文件的修改等具体操作代码,需要的朋友可以了解下。
  • 需求分析: 通过安卓打开相机相册,使用SSM框架搭建后台接口,前端使用retrofit2进行文件传输 注:低门槛实现系列就是不涉及过深的知识点,不做过多的异常捕获,不过滤版本不判空,面向小白。 ...
  • MultipartFile

    2019-08-20 18:07:36
    public ServerResponse upload(MultipartFile file, HttpServletRequest httpServletRequest){ String path = httpServletRequest.getSession().getServletContext().getRealPath("upload"); Strin...
     public ServerResponse upload(MultipartFile file, HttpServletRequest httpServletRequest){
            String path = httpServletRequest.getSession().getServletContext().getRealPath("upload");
            String targetFileName = iFileService.upload(file,path);
            String url = PropertiesUtil.getProperty("ftp.server.http.prefix")+targetFileName;
    
            Map fileMap = Maps.newHashMap();
            fileMap.put("url",targetFileName);
            fileMap.put("url",url);
            return ServerResponse.createBySuccessMessage(fileMap);
        }
    
    展开全文
  • 本篇文章主要介绍了SpringMvc MultipartFile实现图片文件上传示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
  • MultipartFile与File

    2019-10-15 09:06:55
    在实现这个需求的过程中就用得到了MultipartFile与File,而且我对前一个也不是很熟悉。记录一下 什么是MultipartFile MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称...

    前言

    前段时间碰到了中转文件的需求,需要使用HttpClient中转一下文件,过程为:
    描述信息
    在实现这个需求的过程中就用得到了MultipartFile与File,而且我对前一个也不是很熟悉。记录一下

     

    什么是MultipartFile

    MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。【来自百度知道】

    MultipartFile 与 File 的 互相转换

    1. File转MultipartFile

    (1):使用org.springframework.mock.web.MockMultipartFile 需要导入spring-test.jar

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileInputStream fileInputStream = new FileInputStream(file);
            // MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream)
            // 其中originalFilename,String contentType 旧名字,类型  可为空
            // ContentType.APPLICATION_OCTET_STREAM.toString() 需要使用HttpClient的包
            MultipartFile multipartFile = new MockMultipartFile("copy"+file.getName(),file.getName(),ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream);
            System.out.println(multipartFile.getName()); // 输出copytest.txt
        }
    
    

    (2):使用CommonsMultipartFile

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            // 需要导入commons-fileupload的包
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
               while ( (n = inputStream.read(buffer,0,4096)) != -1){
                   os.write(buffer,0,n);
               }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    

    2. MultipartFile转File

    (1):使用File转MultipartFile的逆过程
    你在看这个代码的时候会觉得很熟悉,是的这个就是File转MultipartFile的逆转过程,这个方法会在根目录生成一个文件,需要删除该文件。

     public static void main(String[] args) throws Exception {
            int n;
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            File f = null;
            // 输出文件的新name 就是指上传后的文件名称
            System.out.println("getName:"+multipartFile.getName());
            // 输出源文件名称 就是指上传前的文件名称
            System.out.println("Oriname:"+multipartFile.getOriginalFilename());
            // 创建文件
            f = new File(multipartFile.getOriginalFilename());
            try ( InputStream in  = multipartFile.getInputStream(); OutputStream os = new FileOutputStream(f)){
                // 得到文件流。以文件流的方式输出到新文件
                // 可以使用byte[] ss = multipartFile.getBytes();代替while
                byte[] buffer = new byte[4096];
                while ((n = in.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                // 读取文件第一行
                BufferedReader bufferedReader = new BufferedReader(new FileReader(f));
                System.out.println(bufferedReader.readLine());
                // 输出路径
                bufferedReader.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            // 输出file的URL
            System.out.println(f.toURI().toURL().toString());
            // 输出文件的绝对路径
            System.out.println(f.getAbsolutePath());
            // 操作完上的文件 需要删除在根目录下生成的文件
            File file = new File(f.toURI());
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
    
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (2):使用transferTo (本质上还是使用了流 只不过是封装了步骤)
    会生成文件,最后不需要文件要删除

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            /*byte[] ss = multipartFile.getBytes();
            OutputStream os = new FileOutputStream(file);
            os.write(ss);
            os.close();*/
            multipartFile.transferTo(file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (3):使用FileUtils.copyInputStreamToFile()
    也是会生成文件,到最后也是要删除文件

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            // 把流输出到文件
            FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    4:强转类型

    CommonsMultipartFile commonsmultipartfile = (CommonsMultipartFile) multipartFile;
    DiskFileItem diskFileItem = (DiskFileItem) commonsmultipartfile.getFileItem();
    File file = diskFileItem.getStoreLocation();
    

    这种强转你获得的file只是一个空壳

    你能获取的也只有这个F:\upload_edfce39f_2894_4b66_b865_d5fb8636bdf3_00000000.tmp 网上有说会在根目录生成临时文件的,从tmp也可以看出来是个临时文件,但是我试了好几次啥都没找到。。。。直接获取这个file读取内容也是会报文件找不到的 这是必然的 当然也有在spring配置文件配置CommonsMultipartResolver的 这就感觉很麻烦了。。。。
    但是我们可以看一下diskFileItem 看下图 是不是很熟悉了,从diskFileItem可以获取文件流,其实你看了源码你就知道获取文件流都是从这里获取的。剩下的就好办了 我就不赘述了/。

    在使用临时文件的时候可以使用缓冲区创建临时文件
     

    //  createTempFile(String prefix, String suffix) 
    //  prefix 文件名 suffix 文件格式
    // 默认是tmp格式  C:\Users\dell\AppData\Local\Temp\tmp8784723057512789016.tmp 
    File file =File.createTempFile("tmp", null);
    // txt格式  C:\Users\dell\AppData\Local\Temp\tmp2888293586594052933.txt
    File file =File.createTempFile("tmp", ".txt");
    

    HttpClient构建上传文件参数并实现中转文件

    这里不自己给例子了,参考了其他博客的代码

    // 获取文件名称
    String fileName = file.getOriginalFilename();
    HttpPost httpPost = new HttpPost(url);
    // 创建文件上传实体
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
    builder.addTextBody("filename", fileName);
    HttpEntity entity = builder.build();
    httpPost.setEntity(entity);
    HttpResponse response = httpClient.execute(httpPost);// 执行提交
    

    执行提交之后你会发现你上传的文件名会出现中文乱码
    这里参考
    HttpClient上传文件中文名乱码 该博客详细说明了为什么会乱码以及怎么解决
    我使用的解决办法是:

     //设置模式为RFC6532
     builder.setMode(HttpMultipartMode.RFC6532);
    

     

    展开全文
  • 通过import org.springframework.web.multipart.MultipartFile;上传文件的一个工具性的jar.
  •  MultipartFile multipartFile = new CommonsMultipartFile(item);  System.out.println(multipartFile.getName());  String mults = up.uploadFile(multipartFile);  System.out.println(mults);  ...

    package com.seven.micropay.channel.service.adapter.merRegist;

    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.http.Consts;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpHeaders;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.ContentType;
    import org.apache.http.entity.mime.MultipartEntityBuilder;
    import org.apache.http.entity.mime.content.FileBody;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;

    import com.seven.micropay.channel.util.ImageUploadSSLContextUtils;
    import com.seven.micropay.channel.util.ImageUploadSignUtilss;
    import com.seven.micropay.commons.config.properties.Property;

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.nio.charset.Charset;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.UUID;

    /**
     * ClassName: AlipayHandlerAdapter Description: 微信扫码付适配 date: 2019年11月08日
     * 下午17:33:21 图片上传接口
     * 
     * @author GW
     * @version 1.0
     *
     */
    @Service
    public class ImageUploadutil{
        public Logger log = LoggerFactory.getLogger(this.getClass());
        
        public String uploadFile(MultipartFile multipartFile) {
            
            String uploadUrl=Property.getProperty("upload.Url");
            String p12Url=Property.getProperty("p12Url");
            HttpPost httpPost = new HttpPost(uploadUrl);
            httpPost.setHeader(HttpHeaders.CONTENT_TYPE, ContentType.MULTIPART_FORM_DATA.getMimeType());
            CloseableHttpClient client = null;
            File excelFile = null;
            String error = null;
            String mch_id=Property.getProperty("weixin.pay.cert_password");
            String HMAC_SHA256=Property.getProperty("sign_type");
            String tradeMerKey=Property.getProperty("weixin.pay.provider.key");
            
        
            try {
                client = HttpClients.custom()
                        .setSSLContext(
                                ImageUploadSSLContextUtils.getSSLContext(p12Url, mch_id))
                        .build();

                // 生成签名和图片md5加密
                String hash = DigestUtils.md5Hex(multipartFile.getBytes());
                Map<String, String> param = new HashMap<>(3);

                param.put("media_hash", hash);
                param.put("mch_id", mch_id);
                param.put("sign_type", HMAC_SHA256);

                // 配置post图片上传
                // 用uuid作为文件名,防止生成的临时文件重复
                excelFile = File.createTempFile(UUID.randomUUID().toString(), ".jpg");
                multipartFile.transferTo(excelFile);
                FileBody bin = new FileBody(excelFile, ContentType.create("image/jpg", Consts.UTF_8));
                HttpEntity build = MultipartEntityBuilder.create().setCharset(Charset.forName("utf-8"))
                        .addTextBody("media_hash", hash).addTextBody("mch_id", mch_id)
                        .addTextBody("sign_type", HMAC_SHA256)
                        .addTextBody("sign", ImageUploadSignUtilss.wechatCertficatesSignBySHA256(param, tradeMerKey))
                        .addPart("media", bin).build();
                httpPost.setEntity(build);
                HttpResponse httpResponse = client.execute(httpPost);
                if (httpResponse != null && httpResponse.getStatusLine().getStatusCode() == 200) {
                    String responseEntity = EntityUtils.toString(httpResponse.getEntity());
                    log.info("upload response {}", responseEntity);
                    Document document = DocumentHelper.parseText(responseEntity);
                    if ("SUCCESS".equalsIgnoreCase(document.selectSingleNode("//return_code").getStringValue())) {
                        if ("SUCCESS".equalsIgnoreCase(document.selectSingleNode("//result_code").getStringValue())) {
                            return document.selectSingleNode("//media_id").getStringValue();
                        }
                    }
                    log.error("上传图片失败,异常信息 code ={} des = {}", document.selectSingleNode("//err_code").getStringValue(),
                            document.selectSingleNode("//err_code_de").getStringValue());
                    error = document.selectSingleNode("//err_code_de").getStringValue();
                }
            } catch (Exception e) {
                log.error("微信图片上传异常 , e={}", e);
            } finally {
                if (client != null) {
                    try {
                        client.close();
                    } catch (IOException e) {
                        log.warn("关闭资源httpclient失败 {}", e);
                    }
                }
                if (excelFile != null) {
                    deleteFile(excelFile);
                }
            }
            return error;
        }

        /**
         * 删除临时文件
         *
         * @param files
         */
        private void deleteFile(File... files) {
            for (File file : files) {
                if (file.exists()) {
                    file.delete();
                }
            }
        }

        public static String Println(File savePath, ImageUploadutil up) {
            String fileName = "";
            FileItemFactory factory = new DiskFileItemFactory(16, null);
            String textFieldName = "textField";
            FileItem item = factory.createItem(textFieldName, "text/plain", true, fileName);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            try {
                FileInputStream fis = new FileInputStream(savePath + fileName);
                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();
            }

            MultipartFile multipartFile = new CommonsMultipartFile(item);
            System.out.println(multipartFile.getName());
            String mults = up.uploadFile(multipartFile);
            System.out.println(mults);

            return mults;

        }

    }
     

    展开全文
  • MultipartFile与File的一些事

    万次阅读 多人点赞 2019-01-05 17:29:27
    在实现这个需求的过程中就用得到了MultipartFile与File,而且我对前一个也不是很熟悉。记录一下 什么是MultipartFile MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。...

    前言

    前段时间碰到了中转文件的需求,需要使用HttpClient中转一下文件,过程为:
    描述信息
    在实现这个需求的过程中就用得到了MultipartFile与File,而且我对前一个也不是很熟悉。记录一下

    什么是MultipartFile

    MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。【来自百度知道】

    MultipartFile 与 File 的 互相转换

    1. File转MultipartFile

    (1):使用org.springframework.mock.web.MockMultipartFile 需要导入spring-test.jar

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileInputStream fileInputStream = new FileInputStream(file);
            // MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream)
            // 其中originalFilename,String contentType 旧名字,类型  可为空
            // ContentType.APPLICATION_OCTET_STREAM.toString() 需要使用HttpClient的包
            MultipartFile multipartFile = new MockMultipartFile("copy"+file.getName(),file.getName(),ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream);
            System.out.println(multipartFile.getName()); // 输出copytest.txt
        }
    
    

    (2):使用CommonsMultipartFile

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            // 需要导入commons-fileupload的包
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
               while ( (n = inputStream.read(buffer,0,4096)) != -1){
                   os.write(buffer,0,n);
               }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    
    2. MultipartFile转File

    (1):使用File转MultipartFile的逆过程
    你在看这个代码的时候会觉得很熟悉,是的这个就是File转MultipartFile的逆转过程,这个方法会在根目录生成一个文件,需要删除该文件。

     public static void main(String[] args) throws Exception {
            int n;
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            File f = null;
            // 输出文件的新name 就是指上传后的文件名称
            System.out.println("getName:"+multipartFile.getName());
            // 输出源文件名称 就是指上传前的文件名称
            System.out.println("Oriname:"+multipartFile.getOriginalFilename());
            // 创建文件
            f = new File(multipartFile.getOriginalFilename());
            try ( InputStream in  = multipartFile.getInputStream(); OutputStream os = new FileOutputStream(f)){
                // 得到文件流。以文件流的方式输出到新文件
                // 可以使用byte[] ss = multipartFile.getBytes();代替while
                byte[] buffer = new byte[4096];
                while ((n = in.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                // 读取文件第一行
                BufferedReader bufferedReader = new BufferedReader(new FileReader(f));
                System.out.println(bufferedReader.readLine());
                // 输出路径
                bufferedReader.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            // 输出file的URL
            System.out.println(f.toURI().toURL().toString());
            // 输出文件的绝对路径
            System.out.println(f.getAbsolutePath());
            // 操作完上的文件 需要删除在根目录下生成的文件
            File file = new File(f.toURI());
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
    
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (2):使用transferTo (本质上还是使用了流 只不过是封装了步骤)
    会生成文件,最后不需要文件要删除

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            /*byte[] ss = multipartFile.getBytes();
            OutputStream os = new FileOutputStream(file);
            os.write(ss);
            os.close();*/
            multipartFile.transferTo(file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (3):使用FileUtils.copyInputStreamToFile()
    也是会生成文件,到最后也是要删除文件

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            // 把流输出到文件
            FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    4:强转类型

    CommonsMultipartFile commonsmultipartfile = (CommonsMultipartFile) multipartFile;
    DiskFileItem diskFileItem = (DiskFileItem) commonsmultipartfile.getFileItem();
    File file = diskFileItem.getStoreLocation();
    

    这种强转你获得的file只是一个空壳
    在这里插入图片描述
    你能获取的也只有这个F:\upload_edfce39f_2894_4b66_b865_d5fb8636bdf3_00000000.tmp 网上有说会在根目录生成临时文件的,从tmp也可以看出来是个临时文件,但是我试了好几次啥都没找到。。。。直接获取这个file读取内容也是会报文件找不到的 这是必然的 当然也有在spring配置文件配置CommonsMultipartResolver的 这就感觉很麻烦了。。。。
    但是我们可以看一下diskFileItem 看下图 是不是很熟悉了,从diskFileItem可以获取文件流,其实你看了源码你就知道获取文件流都是从这里获取的。剩下的就好办了 我就不赘述了/。在这里插入图片描述

    在使用临时文件的时候可以使用缓冲区创建临时文件

    //  createTempFile(String prefix, String suffix) 
    //  prefix 文件名 suffix 文件格式
    // 默认是tmp格式  C:\Users\dell\AppData\Local\Temp\tmp8784723057512789016.tmp 
    File file =File.createTempFile("tmp", null);
    // txt格式  C:\Users\dell\AppData\Local\Temp\tmp2888293586594052933.txt
    File file =File.createTempFile("tmp", ".txt");
    

    HttpClient构建上传文件参数并实现中转文件

    这里不自己给例子了,参考了其他博客的代码

    // 获取文件名称
    String fileName = file.getOriginalFilename();
    HttpPost httpPost = new HttpPost(url);
    // 创建文件上传实体
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
    builder.addTextBody("filename", fileName);
    HttpEntity entity = builder.build();
    httpPost.setEntity(entity);
    HttpResponse response = httpClient.execute(httpPost);// 执行提交
    

    执行提交之后你会发现你上传的文件名会出现中文乱码
    这里参考
    HttpClient上传文件中文名乱码
    该博客详细说明了为什么会乱码以及怎么解决
    我使用的解决办法是:

     //设置模式为RFC6532
     builder.setMode(HttpMultipartMode.RFC6532);
    
    展开全文
  • Java_File类和MultipartFile

    千次阅读 2021-03-18 17:02:02
    目录 一、前言 二、File类 2.1 定义 2.2 构造器 2.3 常用方法 三、MultipartFile类 3.1 定义 3.2 常用方法 四、File类和MultipartFile类的转换 4.1 Multipartfile转File类型 4.2 File转Multipartfile类型 4.3创建...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,039
精华内容 19,615
关键字:

multipartfile