Java模拟表单POST请求上传图片到图床

本文介绍如何使用Java模拟表单POST请求上传图片到图床,提供了ApiController.java和api.jsp的关键代码示例,并给出运行效果。通过简单的步骤和代码,帮助读者避免上传过程中的常见问题。
摘要由CSDN通过智能技术生成

Java模拟表单POST请求上传文件

之前踩了很多坑,一步一步摸索上来了,直接复制下面的代码+spring的包,然后配置好mvc(前面的文章都有详细的配置代码了),直接运行,比其他文章好多了是不是?给点评论支持一下呗!

ApiController.java代码

别问我下面代码咋来的,之前的文章已经很详细了,就是MVC普通的流程走一下就行了

package biuaxia.mvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;

/**
 * Class Describe:
 *
 * @author biuaxia
 * @date 2018/11/17
 * @time 23:19
 */
@Controller
public class ApiController {
   

    @RequestMapping("api")
    public String showAjax() {
   
        return "api";
    }

    @RequestMapping(value = "api", method = RequestMethod.POST)
    @ResponseBody
    public String executeImport(MultipartFile file, HttpServletRequest request) throws IOException {
   

        FileInputStream fileInputStream = (FileInputStream) file.getInputStream();

        /*String urlStr = "在这里设置您的API";*/

        Map<String, String> textMap = new HashMap<>(1);

        /*textMap.put("key", "这里可以用来存放请求表单所需的数据");*/

        Map<String, FileInputStream> fileMap = new HashMap<>(1);

        fileMap.put("file", fileInputStream);

        String ret = formUpload(urlStr, textMap, fileMap, request);

        System.out.println(ret);

        return ret;
    }

    /**
     * 上传图片
     *
     * @param urlStr
     * @param textMap
     * @param fileMap
     * @return
     */
    public static String formUpload(String urlStr, Map<String, String> textMap,
                                    Map<String, FileInputStream> fileMap, HttpServletRequest request) {
   
        String res = "";
        HttpURLConnection conn = null;
        //boundary就是request头和上传文件内容的分隔符,我模拟的浏览器中为35位
        String BOUNDARY = "---------------------------" + createRandCode();
        try {
   
            URL url = new URL(urlStr);
            conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(8000);
            conn.setReadTimeout(30000);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            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)");*/
            conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);

            //获得详细的conn内容,里面只有Ua,Content-Type
            Map<String, List<String>> maps = conn.getRequestProperties();
            /*
            for (String str : maps.keySet()) {
                List<String> lists = maps.get(str)
                System.out.println(str + "\t\t\t\t" + lists)
                //User-Agent:[Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36]
                //Content-Type:[multipart/form-data; boundary=---------------------------QSZoQdar9QRF9pRWlSWR8oXpSpEUWIhEPvh]
            }
            */

            OutputStream out = new DataOutputStream(conn.getOutputStream());
            // text
            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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值