精华内容
下载资源
问答
  • java调用需要上传文件接口源码,其中含调用案例,调用工具,下载下来即可使用
  • 记得前一段时间,为了研究Ajax文件上传,找了很多资料,在网上看到的大部分是form表单的方式提交文件,对于Ajax方式提交文件并且也要提交表单中其他数据,发现提及的并不是很多,后来在同事的帮助下,使用...
  • Java自带的HttpURLConnection访问接口文件上传, 含普通参数值传递和文件传递
  • 文件上传同时携带参数 单独进行文件上传的方式常用MultipartFile,但并不能携带其它参数: 使用MultipartHttpServletRequest可将文件参数以键值形式包装起来,传送至controller。 例: 接口: @RequestMapping...

    文件上传同时携带参数

    单独进行文件上传的方式常用MultipartFile,但并不能携带其它参数:

    使用MultipartHttpServletRequest可将文件、参数以键值形式包装起来,传送至controller。

    例:

    接口:

    @RequestMapping(value = "/createTicket", method = RequestMethod.POST)
    @ApiOperation(value = "新建工单", notes = "新建工单")
    @ResponseBody
    public CommonResultBO createTicket(MultipartHttpServletRequest request) {
        log.info("createTicket begin.");
        try {
            TicketInfo ticketInfo = getTicketInfo(request);
            ticketInfo.setStatus("已派发");
            return ticketInfoService.insertTicket(ticketInfo);
        } catch (Exception exc) {
            exc.printStackTrace();
            log.error("createTicket error: " + exc.getMessage());
            return CommonResultBO.init(null, -1, "createTicket failed.");
        }
    }
    
    /**
     * 功能描述 储存文件+获取工单信息类对象
     *
     * @param request 页面传参
     * @return 工单信息类对象
     */
    private TicketInfo getTicketInfo(MultipartHttpServletRequest request) {
        String ticketInfos = request.getParameter("ticketInfos"); // 通过前后端约定的参数名获取参数,这里是json字符串
        List<MultipartFile> files = request.getFiles("file"); // 通过前后端约定的参数名获取参数,这里是文件,getFile获取单个文件,getFiles获取多														  // 个文件
        // 保存工单文件
        String path;
        path = this.readFile(files); // 文件读取
        // setFilePath
        TicketInfo ticketInfo = JSONObject.parseObject(ticketInfos, TicketInfo.class); // 将获取到的json字符串转化为业务实体类
        ticketInfo.setFilePath(path);
        return ticketInfo;
    }
    
    /**
     * 功能描述 读取文件
     *
     * @param files 文件集
     * @return 文件路径
     */
    private String readFile(List<MultipartFile> files) {
        log.info("begin to read file.");
        List<String> paths = new ArrayList<>();
        for (MultipartFile file : files) {
            String path;
            try {
                if (file.isEmpty()) {
                    log.info("file empty.");
                }
                // 获取文件名
                String fileName = file.getOriginalFilename();
                log.info("上传的文件名为:" + fileName);
                // 获取文件的后缀名
                String suffixName = null;
                if (fileName != null) {
                    suffixName = fileName.substring(fileName.lastIndexOf("."));
                }
                log.info("上传的后缀名为:" + suffixName);
                // 文件上传后的路径
                String filePath = "D:\\Download\\file\\";
                path = filePath + fileName;
                File dest = new File(path);
                // 检测是否存在目录
                if (!dest.getParentFile().exists()) {
                    dest.getParentFile().mkdirs();
                }
                // 写入文件
                file.transferTo(dest); // MultipartFile中封装了一个非常简单的方法transferTo(File file),此处只能存放绝对路径,否则会导致读取异常,
                					   // 个人还未遇到过。可以用传统方式来替换。
            } catch (IOException exception) {
                exception.printStackTrace();
                log.error("createTicket error, file transfer error: " + exception.getMessage());
                return null;
            }
            path = path.replace("\\", "\\\\");
            paths.add(path);
        }
        return String.join(",", paths);
    }
    

    postman请求:

    在这里插入图片描述

    参数格式以form-data形式传递。

    展开全文
  • java接口发送文件 + 参数

    千次阅读 2020-02-17 16:35:59
    直接飙代码 这位大哥的接口 ...亲测可用,可以穿多个参数和多个文件。 /** * 测试上传图片 * */ public static void testUploadImage(){ String url = "http://xxxtest/Api/test...

    直接飙代码

    这位大哥的接口 https://www.cnblogs.com/jying/p/10310865.html
    我加了点注释

    亲测可用,可以穿多个参数和多个文件。

    /**
         * 测试上传图片
         * 
         */
        public static void testUploadImage(){
            String url = "http://xxxtest/Api/testUploadModelBaking";
            String fileName = "e:/username/textures/antimap_0017.png";
            Map<String, String> textMap = new HashMap<String, String>();
            //可以设置多个input的name,value
            textMap.put("name", "testname");
            textMap.put("type", "2");
            //设置file的name,路径
            Map<String, String> fileMap = new HashMap<String, String>();
            fileMap.put("upfile", fileName);
            String contentType = "";//image/png
            String ret = formUpload(url, textMap, fileMap,contentType);
            System.out.println(ret);
        }
    
        /**
         * 上传图片
         * @param urlStr
         * @param textMap
         * @param fileMap
         * @param contentType 没有传入文件类型默认采用application/octet-stream
         * contentType非空采用filename匹配默认的图片类型
         * @return 返回response数据
         */
        @SuppressWarnings("rawtypes")
        public static String formUpload(String urlStr, Map<String, String> textMap,
                Map<String, String> fileMap,String contentType) {
            String res = "";
            HttpURLConnection conn = null;
            // boundary就是request头和上传文件内容的分隔符
            String BOUNDARY = "---------------------------123821742118716"; 
            try {
                URL url = new URL(urlStr);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(30000);
                conn.setDoOutput(true);
                conn.setDoInput(true);
                conn.setUseCaches(false);
                //method
                conn.setRequestMethod("POST");
                //http长连接
                conn.setRequestProperty("Connection", "Keep-Alive");
                //客户端标识
                conn.setRequestProperty("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
                // 提交请求方式 : form 表单形式 
                conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);
                OutputStream out = new DataOutputStream(conn.getOutputStream());
                // text  先发送参数  这儿可以用map传多个
                if (textMap != null) {
                    StringBuffer strBuf = new StringBuffer();
                    Iterator iter = textMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        //http消息数据 分割符
                        strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
                        //设置发送数据类型
                        strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r\n\r\n");
                        strBuf.append(inputValue);
                    }
                    //发送数据
                    out.write(strBuf.toString().getBytes());
                }
                // file
                if (fileMap != null) {
                    Iterator iter = fileMap.entrySet().iterator();
                    while (iter.hasNext()) {
                        Map.Entry entry = (Map.Entry) iter.next();
                        String inputName = (String) entry.getKey();
                        String inputValue = (String) entry.getValue();
                        if (inputValue == null) {
                            continue;
                        }
                        File file = new File(inputValue);
                        String filename = file.getName();
                        
                        //没有传入文件类型,同时根据文件获取不到类型,默认采用application/octet-stream
                        contentType = new MimetypesFileTypeMap().getContentType(file);
                        //contentType非空采用filename匹配默认的图片类型
                        if(!"".equals(contentType)){
                            if (filename.endsWith(".png")) {
                                contentType = "image/png"; 
                            }else if (filename.endsWith(".jpg") || filename.endsWith(".jpeg") || filename.endsWith(".jpe")) {
                                contentType = "image/jpeg";
                            }else if (filename.endsWith(".gif")) {
                                contentType = "image/gif";
                            }else if (filename.endsWith(".ico")) {
                                contentType = "image/image/x-icon";
                            }
                        }
                        if (contentType == null || "".equals(contentType)) {
                        //如果不知道文件类型的话,可以设为application/octet-stream,以二进制流的形式上传下载
                            contentType = "application/octet-stream";
                        }
                        StringBuffer strBuf = new StringBuffer();
                        strBuf.append("\r\n").append("--").append(BOUNDARY).append("\r\n");
                        //发送数据类型方式
                        strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n");
                        strBuf.append("Content-Type:" + contentType + "\r\n\r\n");
                        out.write(strBuf.toString().getBytes());
                        DataInputStream in = new DataInputStream(new FileInputStream(file));
                        int bytes = 0;
                        byte[] bufferOut = new byte[1024];
                        while ((bytes = in.read(bufferOut)) != -1) {
                            out.write(bufferOut, 0, bytes);
                        }
                        in.close();
                    }
                }
                byte[] endData = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
                out.write(endData);
                out.flush();
                out.close();
                // 读取返回数据
                StringBuffer strBuf = new StringBuffer();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = null;
                while ((line = reader.readLine()) != null) {
                    strBuf.append(line).append("\n");
                }
                res = strBuf.toString();
                reader.close();
                reader = null;
            } catch (Exception e) {
                System.out.println("发送POST请求出错。" + urlStr);
                e.printStackTrace();
            } finally {
                if (conn != null) {
                    conn.disconnect();
                    conn = null;
                }
            }
            return res;
        }
    
    

    如果是传入流的话转发接口的话直接将文件流转成二进制然后直接传进去即可。

    这里简单列举一下在 HTTP 里经常遇到的几个文件类型:

    text:即文本格式的可读数据,我们最熟悉的应该就是 text/html 了,表示超文本文档,此外还有纯文本 text/plain、样式表 text/css 等。

    image:即图像文件,有 image/gif、image/jpeg、image/png 等。
    audio/video:音频和视频数据,例如 audio/mpeg、video/mp4 等。

    application:数据格式不固定,可能是文本也可能是二进制,必须由上层应用程序来解释。常见的有 application/json,application/javascript、application/pdf 等。

    如果实在是不知道上传文件数据是什么类型,就用 application/octet-stream。

    展开全文
  • 如果上传的不是图片,要在这里改文件格式,比如txt文件,这里应该是text/plain sb.append("\r\n\r\n"); dos.write(sb.toString().getBytes()); FileInputStream fis = new FileInputStream(f); byte[] buffer =...

     

    1.提交数据

    /**
         * POST报文客户端
         *
         * @param url       调用地址字符串
         * @param jsonParam 报文实体JSON
         * @return String
         * @author Al1en
         */
        public static String httpPostWithForm(String url, JSONObject jsonParam) {
            URL u = null;
            HttpURLConnection con = null;
            // 构建请求参数
            StringBuffer sb = new StringBuffer();
            for (String s : jsonParam.keySet()) {
                sb.append(s);
                sb.append("=");
                sb.append(jsonParam.getString(s));
                sb.append("&");
            }
    
            System.out.println("send_url:" + url);
            System.out.println("send_data:" + sb.toString());
            // 尝试发送请求
            try {
                u = new URL(url);
                con = (HttpURLConnection) u.openConnection();
                 POST 只能为大写,严格限制,post会不识别
                con.setRequestMethod("POST");
                con.setDoOutput(true);
                con.setDoInput(true);
                con.setUseCaches(false);
                con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                OutputStreamWriter osw = new OutputStreamWriter(con.getOutputStream(), "UTF-8");
                osw.write(sb.toString());
                osw.flush();
                osw.close();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (con != null) {
                    con.disconnect();
                }
            }
    
            // 读取返回内容
            StringBuffer buffer = new StringBuffer();
            try {
                //一定要有返回值,否则无法把请求发送给server端。
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));
                String temp;
                while ((temp = br.readLine()) != null) {
                    buffer.append(temp);
                    buffer.append("\n");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return buffer.toString();
        }

     

    2.提交数据及文件

    
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.MalformedURLException;
    import java.net.ProtocolException;
    import java.net.URL;
    import java.util.HashMap;
    import java.util.Map;
    public class HttpPost {
        
        private static final String BOUNDARY = "-------45962402127348";
        private static final String FILE_ENCTYPE = "multipart/form-data";
        //存放数据
        Map<String, String> textParams = new HashMap<String, String>();
        //存放File文件
        Map<String, File> fileparams = new HashMap<String, File>();
        
        String url;
    
        public HttpPost(String url)throws Exception{
            this.url = url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public void addTextParams(String key,String value) {
            this.textParams.put(key, value);
        }
    
        public void addFileparams(String key,File file) {
            this.fileparams.put(key, file);
        }
    
        public String send()throws IOException{
            InputStream post = post(this.url, this.textParams, this.fileparams);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int b;
            while ((b = post.read()) != -1) {
                out.write(b);
            }
            return new String(out.toByteArray());
        }
    
        
        /**
         *
         * @param urlStr http请求路径
         * @param params 请求参数
         * @param images 上传文件
         * @return
         */
        public static InputStream post(String urlStr, Map<String, String> params,
                                       Map<String, File> images) {
            InputStream is = null;
    
            try {
                URL url = new URL(urlStr);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
    
                con.setConnectTimeout(5000);
                con.setDoInput(true);
                con.setDoOutput(true);
                con.setUseCaches(false);
                con.setRequestMethod("POST");
                con.setRequestProperty("Connection", "Keep-Alive");
                con.setRequestProperty("Charset", "UTF-8");
                con.setRequestProperty("Content-Type", FILE_ENCTYPE + "; boundary="
                        + BOUNDARY);
    
                StringBuilder sb = null;
                DataOutputStream dos = new DataOutputStream(con.getOutputStream());;
                if (params != null) {
                    sb = new StringBuilder();
                    for (String s : params.keySet()) {
                        sb.append("--");
                        sb.append(BOUNDARY);
                        sb.append("\r\n");
                        sb.append("Content-Disposition: form-data; name=\"");
                        sb.append(s);
                        sb.append("\"\r\n\r\n");
                        sb.append(params.get(s));
                        sb.append("\r\n");
                    }
    
                    dos.write(sb.toString().getBytes());
                }
                if (images != null) {
                    for (String s : images.keySet()) {
                        File f = images.get(s);
                        sb = new StringBuilder();
                        sb.append("--");
                        sb.append(BOUNDARY);
                        sb.append("\r\n");
                        sb.append("Content-Disposition: form-data; name=\"");
                        sb.append(s);
                        sb.append("\"; filename=\"");
                        sb.append(f.getName());
                        sb.append("\"\r\n");
                        sb.append("Content-Type: multipart/form-data");//这里注意!如果上传的不是图片,要在这里改文件格式,比如txt文件,这里应该是text/plain
                        sb.append("\r\n\r\n");
                        dos.write(sb.toString().getBytes());
    
                        FileInputStream fis = new FileInputStream(f);
                        byte[] buffer = new byte[1024];
                        int len;
                        while ((len = fis.read(buffer)) != -1) {
                            dos.write(buffer, 0, len);
                        }
                        dos.write("\r\n".getBytes());
                        fis.close();
                    }
    
                    sb = new StringBuilder();
                    sb.append("--");
                    sb.append(BOUNDARY);
                    sb.append("--\r\n");
                    dos.write(sb.toString().getBytes());
                }
                dos.flush();
    
                if (con.getResponseCode() == 200){
                    is = con.getInputStream();
                }
    
    
                dos.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (ProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return is;
        }
    
    
        public static void main(String[] args)throws Exception {
            HttpPost post = new HttpPost("http://***");
            post.addTextParams("a", "1");
            post.addTextParams("b", "hahah");
            post.addTextParams("c", "你好");
            post.addFileparams("verifyFace", new File("c:/123.jpg"));
            String result = post.send();
            System.out.println(result);
        }
    }
    
    

     

    展开全文
  • 微信小程序服务端接口,支持普通Http请求、上传文件、长连接。后台服务使用springboot框架搭建,mongodb做数据库,redis做缓存。  运行环境:JDK8  源代码的说明中有几个注意事项:  一、测试小程序wx.request...
  • Java实现文件上传

    2014-04-25 08:58:39
    简单的文件上传,结合struts实现文件上传的一个demo,适合初学者。
  • 前段时间写了一个上传文件接口,发现需要上传文件同时,还需要加上json字符串才行,最后顺利解决。 前端使用formdata进行传输,不懂可以百度。 后端代码: public IotResponseObject<Object> ...

    前言:

    前段时间写了一个上传文件接口,发现需要上传文件的同时,还需要加上json字符串才行,最后顺利解决。

    前端使用formdata进行传输,不懂可以百度。

    后端代码:

     public IotResponseObject<Object> assignCard(HttpServletRequest servletRequest) throws Exception{
            IotResponseObject<Object> responseObject = new IotResponseObject<>();
            MultipartFile file = null;
            //前端传的文件名叫file,json串的key是type
            if (servletRequest instanceof StandardMultipartHttpServletRequest) {
                MultiValueMap<String, MultipartFile> fileMap = ((StandardMultipartHttpServletRequest) servletRequest).getMultiFileMap();
                file = fileMap.get("file").get(0);
            }
            String jsonType = servletRequest.getParameter("type");
            AssignCardFrom type = JSONObject.parseObject(jsonType, AssignCardFrom.class);
    }

    之前都是如下接收文件的,没有同时接收文件又接收JSON的:

      public IotResponseObject addCard(@RequestParam MultipartFile file) {}

    总结:

    springMVC把各种类型都封装好了,直接用参数就可以接收,结果却忘了最原始的HTTPServletRequest,直接从request中获取就好了,除了这种原始的方式外,还可以使用对象来接收,使用@RequestBody。

    展开全文
  • 现有的接口中基本只用到了 get 和 post 两种,但是在文件上传的时候遇到了问题。 node 层使用 eggjs ,一般的 post 的请求直接在 ctx.body 就能拿到请求的参数,但是 /upload 的接口就不行,拿到的 body 是 {} ,...
  • HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。
  • Java调用远程接口(传递json数据或文件和其它参数)调用接口传递json数据调用接口传递文件及其它参数 调用接口传递json数据 package com.my.test; import com.alibaba.fastjson.JSON; import org.apache....
  • C#调用Java接口演示

    2016-09-21 13:31:53
    C#调用Java接口演示
  • 其中GET用于从服务器获取数据,POST主要用于向服务器提交一些表单数据,例如文件上传等。...今天我们就一起来学习HTTP POST的报文格式以及通过Java来模拟文件上传的请求。 啥都不说直接上代码,能用...
  • java 封装上传文件接口

    千次阅读 2019-01-26 09:51:36
    url: 上传文件接口地址 MultipartFile[] files 文件对象   public static String floorSSOHttpFile(String url, MultipartFile[] files,String username) throws IOException{  SimpleDateFormat sdf ...
  • java参数文件上传

    千次阅读 2019-07-11 23:02:54
    项目是api接口,有两个...首先是服务器接收上传java代码 public void addCompanyUpLoadFile(HttpServletRequest request, HttpServletResponse response) throws Exception { // response.setHeader("Acces...
  • 这里写自定义目录标题java实现调用第三方接口post请求上传文件请求参数为MultipartFile携带token的解决方案 java实现调用第三方接口post请求上传文件请求参数为MultipartFile携带token的解决方案 控制器层: /** * ...
  • 最近接到了做在线文档编辑的需求,普通的rpc接口比如dubbo或者spring cloud的feign... // upload_url为上传文件接口调用地址 HttpPost httpPost = new HttpPost(upload_url); // 使用try resource进行httpClient...
  • 参考了网络上各位大神写的,最终达到了同时上传文件参数的目的,后台也能获取到,废话不多说,直接上代码吧     首先,我的网络请求封装 同时上传文件参数的方法是imageFileRequest /* * 作者:iscopy ...
  • //这里读取的是上边url对应的上传文件接口的返回值,读取出来后,然后接着返回到前端,实现接口中调用接口的方式 } } catch (Exception e) { System.out.println("发送POST请求出现异常!" + e); e....
  • java使用接口测试插件正确测试文件上传接口 测试文件的时候遇到许多错误,记录一下,比如:Current request is not a multipart request,和空指针异常 一、用postman测试 需要注意的是: 1.图中的headers要去掉,...
  • import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util...
  • 请问传输稍大点的文件接口时,接口定义的什么类型的参数比较好,string ,字节数组还是流...,因为是第一次做文件上传,没有经验,不知道定义接口传参格式是哪种比较好,文件大约几十到几百兆的音频文件
  • package ... import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLC...
  • * 文件上传 * @param url * @param content 上传参数 * @return */ public static String uploadFile(String url, HttpEntity content) { String result = ""; CloseableHttpClient httpclient = ...
  • package ... import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import jav...
  • 项目过程中,经常会有和第三方接口打交道的过程,今天实现调用第三方上传文件接口!! 个人小习惯与君分享: 通常拿到第三方的接口文档的时候,不是第一时间先写代码,而是详细阅读接口文档。若接口需要第三方提供...
  • } 使用postman测试时,记得将类型改成multipart/form-data 文件参数file 需要其他参数可以自行设计 当然我们大多数是不将上传的文件封装在类里面,而是另起一个实体,一个文件 接口 只是接收的时候接收参数 和文件 ...
  • 访问参数通过io流,麻烦的不行,写了一大堆,参数传输稀烂。(折腾半天有人说用RestTemplate啊,真可谓书到用时方恨少) 二、Spring RestTemplate 废话不多说,测试时,客户端 private static RestTemplate ...
  • 1.客户端代码如下:import java.io.File;import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,690
精华内容 35,076
关键字:

java接口同时上传文件、参数

java 订阅