首页 > 编程语言 >Java实现FormData接口调用

Java实现FormData接口调用

时间:2024-11-13 19:23:42浏览次数:1  
标签:FEED Java String FormData request 接口 httpConn new LINE

JAVA原生实现

package com.hisense.demo.utils;

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

/**
 * @author tianluhua
 * @version 1.0
 * @since 2024/11/13 17:49
 */
public class Demo {
    public static void main(String[] args) {
        String targetURL = "http://10.18.217.60:32641/film_grain_analysis"; // 替换为目标URL
        File[] files = {
                new File("D:\\desktop\\sample_img.jpg"), // 替换为第一个文件路径
                new File("D:\\desktop\\sample_img_1.jpg")  // 替换为第二个文件路径
        };
        String deviceId = "wfureufeewe"; // 替换为实际的deviceid

        try {
            uploadFiles(targetURL, files, deviceId);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void uploadFiles(String targetURL, File[] files, String deviceId) throws IOException {
        String boundary = "===" + System.currentTimeMillis() + "===";
        String LINE_FEED = "\r\n";

        URL url = new URL(targetURL);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true);
        // 请求超时时间
        httpConn.setReadTimeout(60 * 1000);
        // 连接超时时间
        httpConn.setConnectTimeout(10 * 1000);
        httpConn.setDoInput(true);
        httpConn.setRequestMethod("POST");
        httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

        try (DataOutputStream request = new DataOutputStream(httpConn.getOutputStream())) {
            // Add deviceid part
            request.writeBytes("--" + boundary + LINE_FEED);
            request.writeBytes("Content-Disposition: form-data; name=\"deviceid\"" + LINE_FEED);
            request.writeBytes(LINE_FEED);
            request.writeBytes(deviceId + LINE_FEED);

            // Add file parts
            for (File file : files) {
                String fileName = file.getName();
                request.writeBytes("--" + boundary + LINE_FEED);
                request.writeBytes("Content-Disposition: form-data; name=\"files\"; filename=\"" + fileName + "\"" + LINE_FEED);
                request.writeBytes("Content-Type: " + HttpURLConnection.guessContentTypeFromName(fileName) + LINE_FEED);
                request.writeBytes(LINE_FEED);

                try (FileInputStream inputStream = new FileInputStream(file)) {
                    byte[] buffer = new byte[4096];
                    int bytesRead;
                    while ((bytesRead = inputStream.read(buffer)) != -1) {
                        request.write(buffer, 0, bytesRead);
                    }
                }
                request.writeBytes(LINE_FEED);
            }

            // End of multipart/form-data.
            request.writeBytes("--" + boundary + "--" + LINE_FEED);
            request.flush();
        }

        // Check server's response
        int responseCode = httpConn.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            StringBuilder response = new StringBuilder();

            try (BufferedReader in = new BufferedReader(new InputStreamReader(
                    httpConn.getInputStream()))) {
                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    response.append(inputLine);
                }
            }
            String responseStr = response.toString();
            System.out.println(responseStr);
        } else {
            System.out.println("File upload failed. Server returned HTTP code: " + responseCode);
        }
    }

}

OKHttp实现

package com.hisense.demo.mobileagent;

import okhttp3.*;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * @author tianluhua
 * @version 1.0
 * @since 2024/7/25 14:33
 */
public class Demo {

   /**
    * 对应的 POST 请求接口,采用 form-data传参
    * 
    */
    public static void main(String[] args) throws IOException {

        // 定义的接口API
        String api = ""
        OkHttpClient client = new OkHttpClient().newBuilder()
                .connectTimeout(600, TimeUnit.SECONDS)
                .writeTimeout(600, TimeUnit.SECONDS)
                .readTimeout(600, TimeUnit.SECONDS)
                .build();
        MediaType mediaType = MediaType.parse("text/plain");
  
        // 请求参数,可能有多个
        RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
                // 文件参数,参数名为file,根据具体的接口协议来确定,文件的路径根据实际来确定
                .addFormDataPart("file", "img.png",
                        RequestBody.create(MediaType.parse("application/octet-stream"), new File("E:\\work\\common\\coding\\java-demo\\src\\main\\java\\com\\hisense\\demo\\mobileagent\\img.png")))
                // 其他参数
                .addFormDataPart("instruction","hello")
                // 其他参数
                .addFormDataPart("knowledge","hello")
                .build();
        Request request = new Request.Builder()
                .url(api)
                .method("POST", body)
                .build();
        Response response = client.newCall(request).execute();

        // 返回响应结果
        System.out.println(response);
        // 返回结果数据
        String json = response.body().string();
    }
}

Openfeign实现

  • fallbackFactory为反馈机制,也可以为空,采用默认的方式
@Component
@FeignClient(value = "test", contextId = "test", url = "${test.api}", fallbackFactory = TestApiFallbackFactory.class)
public interface TestApi {

    @PostMapping(value = "/generate", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String generate(@RequestPart(value = "file") MultipartFile file, @RequestParam(value = "param") String param);

}

标签:FEED,Java,String,FormData,request,接口,httpConn,new,LINE
From: https://www.cnblogs.com/knxhd/p/18544569

相关文章

  • Java版学生管理系统
    importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;publicclassStudent{//创建JFrame窗口privateJFr......
  • 什么是 Java中的 OOM
    一、什么是Java中的OOM(OutOfMemoryError)在Java中,OutOfMemoryError(OOM)是一个运行时错误,表示JVM(JavaVirtualMachine)在执行程序时,无法为对象分配足够的内存。通常,这意味着JVM堆内存或其他内存区域(如方法区、直接内存等)已用尽。OOM错误通常发生在以下几......
  • javaScript对象函数初相识
    1.1、对象初相识1.1.1、对象的初识1.1.1.1、对象的定义现实生活中,万物皆对象,对象是一个具体的事物,看得见摸得着的实物。例如一本书,一辆汽车,一个人可以是“对象”,一个数据库,一张网页,一个与远程服务器的连接也可以是“对象”。例子:明星、女朋友、班主任、苹果、手机周星驰......
  • javascript如何进行冒泡排序?
    冒泡排序的规律有一个数组[5,4,3,2,1],假如说要重新排序,进行升序排序,冒泡排序步骤如下5和4比较,5大,5和4交换位置[4,5,3,2,1]5和3比较,5大,5和3交换位置[4,3,5,2,1]5和2比较,5大。5和2交换位置[4,3,2,5,1]5和1比较,5大,5和1交换位置[4,3,2,1,5]5排到了最后一位4开始和后面的......
  • CPT111: Java Programming Computing
    ComputingCPT111:JavaProgrammingSemester1,2024-25Coursework3:ProgrammingProject–ASimpleQuizSystemReadcarefully—nodispensationwillbegivenforlackofawarenessoftherulesAssignmenttypeThisisagroupprogrammingassignment.Yo......
  • 深入理解接口测试:实用指南与最佳实践5.0(一)
    ✨博客主页:https://blog.csdn.net/m0_63815035?type=blog......
  • Java毕业设计----基于Java的情感分析毕业设计
    目录引言设计目标项目结构具体实践总结 Python版本引言情感分析(SentimentAnalysis)是自然语言处理(NLP)中的一个重要应用,它通过对文本内容的情感倾向进行分类,帮助机器理解文本的情感状态。情感分析通常分为两类:情感极性分析(例如,判断文本是正面、负面还是中立)和情感强......
  • 【最新原创毕设】面向课堂教学的智能课堂点名系统+09531(免费领源码)可做计算机毕业设计
    摘要本文旨在设计和实现一个基于智能课堂点名系统的智能助手。随着高校招生规模的不断扩大和信息化技术的发展,为教师提供一款便捷、全面的点名系统具有重要意义。本系统通过整合校园各项服务资源和功能,旨在帮助教师和学生更好地适应智能课堂,提供全方位的指导和支持。本文......
  • (2024最新毕设合集)基于SpringBoot的广州糖水甜品店推荐系统-28495|可做计算机毕业设计J
    摘要随着人们生活水平的提高和饮食习惯的多样化,甜品在日常生活中扮演着越来越重要的角色。特别是在中国南方地区,甜品店和糖水店已经成为人们经常光顾的地方,而广州作为美食之都,拥有众多具有独特风味的糖水甜品店。然而,由于市场竞争激烈,消费者往往面临选择困难,需要花费大量时间......
  • 深入解析Java中的向上转型与向下转型:接口究竟能否包含方法实现?
    目录一、什么是向上转型和向下转型?二、接口中能包含方法实现吗?三、总结在Java编程中,“向上转型”和“向下转型”是与继承相关的重要概念,许多初学者在理解这些概念时常常感到困惑。同时,Java中的接口是面向对象编程的重要组成部分,关于接口能否包含方法实现的问题,在不同的Jav......