java 后台通过post请求 上传文件

文章转载:https://blog.csdn.net/wohaqiyi/article/details/77621517

import microservice.fpzj.control.base.BaseController;
import org.springframework.web.bind.annotation。*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io. *;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

private String uploadFilePdf(MultipartFile uploadFile){
    String result="";

    try {

        // 换行符
        final String newLine = "\r\n";
        final String boundaryPrefix = "--";
        // 定义数据分隔线
        String BOUNDARY = "========7d4a6d158c9";
        // 服务器的域名
        URL url = new URL(fileUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        // 设置为POST情
        conn.setRequestMethod("POST");
        // 发送POST请求必须设置如下两行
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        // 设置请求头参数
        conn.setRequestProperty("connection", "Keep-Alive");
        conn.setRequestProperty("Charset", "UTF-8");
        conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

        OutputStream out = new DataOutputStream(conn.getOutputStream());

        // 上传文件

        StringBuilder sb = new StringBuilder();
        sb.append(boundaryPrefix);
        sb.append(BOUNDARY);
        sb.append(newLine);
        // 文件参数,file参数名可以随意修改(根据你要上传的文件类型)
        sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + uploadFile.getOriginalFilename()
                + "\"" + newLine);
        sb.append("Content-Type:application/octet-stream");
        // 参数头设置完以后需要两个换行,然后才是参数内容
        sb.append(newLine);
        sb.append(newLine);

        // 将参数头的数据写入到输出流中
        out.write(sb.toString().getBytes());

        // 数据输入流,用于读取文件数据
        DataInputStream in = new DataInputStream(uploadFile.getInputStream());
        byte[] bufferOut = new byte[1024*8];
        int bytes = 0;
        // 每次读8KB数据,并且将文件数据写入到输出流中
        while ((bytes = in.read(bufferOut)) != -1) {
            out.write(bufferOut, 0, bytes);
        }
        // 最后添加换行
        out.write(newLine.getBytes());
        in.close();

        // 定义最后数据分隔线,即--加上BOUNDARY再加上--。
        byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)
                .getBytes();
        // 写上结尾标识
        out.write(end_data);
        out.flush();
        out.close();

        // 定义BufferedReader输入流来读取URL的响应

        BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        String line = null;
        while ((line = reader.readLine()) != null) {
            result += line; //这里读取的是上边url对应的上传文件接口的返回值,读取出来后,然后接着返回到前端,实现接口中调用接口的方式
        }
    } catch (Exception e) {
        System.out.println("发送POST请求出现异常!" + e);
        e.printStackTrace();
    }


    return result;
}

返回参数:JSON

原文:https://blog.csdn.net/xiaose_307/article/details/72887285

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
 
public class HttpRequestUtil {
 
    / **
     *发送get请求
     * 
     * @param requestUrl
     *请求url
     * @param requestHeader
     *请求头
     * @param responseEncoding
     *响应编码
     * @return页面响应html
     * /
    public static String sendGet(String requestUrl,Map <String,String> requestHeader,String responseEncoding){
        String result =“”;
        BufferedReader reader = null;
        try {
            if(requestUrl == null || requestUrl.isEmpty()){
                return result;
            }
            URL realUrl =新的URL(requestUrl);
            URLConnection connection = realUrl.openConnection();
            connection.setRequestProperty(“accept”,“text / html,application / xhtml + xml,image / jxr,* / *”);
            connection.setRequestProperty(“user-agent”,“Mozilla / 5.0(Windows NT 10.0; WOW64; rv:53.0)Gecko / 20100101 Firefox / 53.0”);
            if(requestHeader!= null && requestHeader.size()> 0){
                for(Entry <String,String> entry:requestHeader.entrySet()){
                    connection.setRequestProperty(entry.getKey(),entry.getValue());
                }
            }
            connection.connect();
            if(responseEncoding == null || responseEncoding.isEmpty()){
                responseEncoding =“UTF-8”;
            }
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),responseEncoding));

            while((line = reader.readLine())!= null){
                result + = line;
            }
        }赶上(例外五){
            的System.out.println( “发送GET请求出现异常!”);
            e.printStackTrace();
        } finally {
            try {
                if(reader!= null){
                    reader.close();
                }
            }赶上(例外五){
                e.printStackTrace();
            }
        }
        返回结果;
    }
 
    / **
     *发送帖子请求
     * 
     * @param requestUrl
     *请求url
     * @param requestHeader
     *请求头
     * @param formTexts
     *表单数据
     * @param文件
     *上传文件
     * @param requestEncoding
     *请求编码
     * @param responseEncoding
     *响应编码
     * @return页面响应html
     * /
    public static String sendPost(String requestUrl,Map <String ,String> requestHeader,Map <String,String> formTexts,Map <String,String> files,String requestEncoding,String responseEncoding){
        OutputStream out = null;
        BufferedReader reader = null;
        String result =“”;
        try {
            if(requestUrl == null || requestUrl.isEmpty()){
                返回结果;
            }
            URL realUrl =新的URL(requestUrl);
            HttpURLConnection connection =(HttpURLConnection)realUrl.openConnection();
            connection.setRequestProperty(“accept”,“text / html,application / xhtml + xml,image / jxr,* / *”);
            connection.setRequestProperty(“user-agent”,“Mozilla / 5.0(Windows NT 10.0; WOW64; rv:53.0)Gecko / 20100101 Firefox / 53.0”);
            if(requestHeader!= null && requestHeader.size()> 0){
                for(Entry <String,String> entry:requestHeader.entrySet()){
                    connection.setRequestProperty(entry.getKey(),entry.getValue());
                }
            }
            connection.setDoOutput(真);
            connection.setDoInput(真);
            connection.setRequestMethod( “POST”);
            if(requestEncoding == null || requestEncoding.isEmpty()){
                requestEncoding =“UTF-8”;
            }
            如果(的ResponseEncoding == NULL || responseEncoding.isEmpty()){
                的ResponseEncoding = “UTF-8”;
            }
            if(requestHeader!= null && requestHeader.size()> 0){
                for(Entry <String,String> entry:requestHeader.entrySet()){
                    connection.setRequestProperty(entry.getKey(),entry.getValue()) ;
                }
            }
            if(files == null || files.size()== 0){
                connection.setRequestProperty(“content-type”,“application / x-www-form-urlencoded”);
                out = new DataOutputStream(connection.getOutputStream());
                if(formTexts!= null && formTexts.size()> 0){
                    String formData =“”;
                    for(Entry <String,String> entry:formTexts.entrySet()){
                        formData + = entry.getKey()+“=”+ entry.getValue()+“&”;
                    }
                    formData = formData.substring(0,formData.length() - 1);
                    out.write(formData.toString()的getBytes(requestEncoding));


                String boundary =“-----------------------------”+ String.valueOf(new Date()。getTime());
                connection.setRequestProperty(“content-type”,“multipart / form-data; boundary =”+ boundary);
                out = new DataOutputStream(connection.getOutputStream());
                if(formTexts!= null && formTexts.size()> 0){
                    StringBuilder sbFormData = new StringBuilder();
                    for(Entry <String,String> entry:formTexts.entrySet()){
                        sbFormData.append(“ - ”+ boundary +“\ r \ n”);
                        sbFormData.append(“Content-Disposition:form-data; name = \”“+ entry.getKey()+”\“\ r \ n \ r \ n”);
                        sbFormData.append(entry.getValue()+“\ r \ n”);
                    }
                    out.write(sbFormData.toString()。getBytes(requestEncoding));
                }
                为(条目<字符串,字符串>项:files.entrySet()){
                    字符串文件名= entry.getKey();
                    String filePath = entry.getValue();
                    if(fileName == null || fileName.isEmpty()|| filePath == null || filePath.isEmpty()){
                        continue;
                    }
                    file file = new File(filePath);
                    if(!file.exists()){
                        continue;
                    }
                    out.write((“ - ”+ boundary +“\ r \ n”)。getBytes(requestEncoding));
                    out.write((“Content-Disposition:form-data; name = \”“+ fileName +”\“; filename = \”“+ file.getName()+”\“\ r \ n”)。getBytes( requestEncoding));
                    out.write((“Content-Type:application / x-msdownload \ r \ n \ r \ n”)。getBytes(requestEncoding));
                    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);


                    out.write(。( “\ r \ n”个)的getBytes(requestEncoding));
                }
                //out.write(("--“+ boundary +” - “)。getBytes(requestEncoding));这样写微信公众号开发上传素材有问题
                                out.write((” - “+ boundary +” - \ r \ n“个)的getBytes(requestEncoding));
            }
            out.flush();
            out.close();
            out = null;
            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),responseEncoding));
            字符串行;
            while((line = reader.readLine())!= null){
                result + = line;
            }
        }赶上(例外五){
            的System.out.println( “发送POST请求出现异常!”);
            e.printStackTrace();
        } finally {
            try {
                if(out!= null){
                    out.close();
                }
                if(reader!= null){
                    reader.close();
                }
            }赶上(IOException异常前){
                ex.printStackTrace();
            }
        }
        返回结果;
    }

}

猜你喜欢

转载自blog.csdn.net/wangrongfei136/article/details/84332193