java创建上传文件接口并使用HTTP测试

这篇具有很好参考价值的文章主要介绍了java创建上传文件接口并使用HTTP测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建上传文件接口

备注: 使用jersey框架

@Path("/upload")
@Controller
public class UploadFileController {

	@Path("/files")
	@POST
	@Consumes(MediaType.MULTIPART_FORM_DATA)
	@Produces(MediaType.APPLICATION_JSON)
	public Response uploadFiles2(@FormDataParam("data") String data,
			@FormDataParam("files") List<FormDataBodyPart> bodyParts,
			@FormDataParam("files") FormDataContentDisposition fileDispositions,
			@FormDataParam("file") InputStream fileInputStream,
			@FormDataParam("file") FormDataContentDisposition fileDisposition) {
		// 处理多文件
		for(FormDataBodyPart fdsp: bodyParts) {
			BodyPartEntity bodyPartEntity = (BodyPartEntity) fdsp.getEntity();
			String fileName = bodyParts.get(i).getContentDisposition().getFileName();
			InputStream inputStream = bodyPartEntity.getInputStream();
			//TODO 处理文件
		}

		// 处理单文件
		// 根据fileInputStream输入流处理单文件内容

		return "OK";
	}
}

2.前端代码调用上传文件接口

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>上传文件前端代码</title>
</head>
<body>
	<h2>上传文件</h2>
	<form action="/upload/files" enctype="multipart/form-data" method="post">
		<label>选择多文件上传</label><input type= "file" name="files" multiple /> <br/><br/>
		<label>选择单文件上传</label><input type= "file" name="file" /> <br/><br/>
		<label>其他参数</label> <input name="data" maxlength="100"/> <br/><br/>
		<input type="submit" title="上传"/>
	</form>
</body>
</html>

2.后端调用上传文件接口

2.1.使用HttpURLConnection上传文件

2.1.1.上传本地文件

参考链接: Jersey (JAX-RS) multiple files upload example文章来源地址https://www.toymoban.com/news/detail-507610.html

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;

public class HttpPostMultipart {
    private final String boundary;
    private static final String LINE = "\r\n";
    private HttpURLConnection httpConn;
    private String charset;
    private OutputStream outputStream;
    private PrintWriter writer;
    
    public HttpPostMultipart(String requestURL, String charset, Map<String, String> headers) throws IOException {
        this.charset = charset;
        boundary = UUID.randomUUID().toString();
        URL url = new URL(requestURL);
        httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true);
        httpConn.setDoInput(true);
        httpConn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
        if (headers != null && headers.size() > 0) {
            Iterator<String> it = headers.keySet().iterator();
            while (it.hasNext()) {
                String key = it.next();
                String value = headers.get(key);
                httpConn.setRequestProperty(key, value);
            }
        }
        outputStream = httpConn.getOutputStream();
        writer = new PrintWriter(new OutputStreamWriter(outputStream, charset), true);
    }

    public void addFormField(String name, String value) {
        writer.append("--" + boundary).append(LINE);
        writer.append("Content-Disposition: form-data; name=\"" + name + "\"").append(LINE);
        writer.append("Content-Type: text/plain; charset=" + charset).append(LINE);
        writer.append(LINE);
        writer.append(value).append(LINE);
        writer.flush();
    }

    public void addFilePartLocalFile(String fieldName, File uploadFile)
            throws IOException {
        String fileName = uploadFile.getName();
        writer.append("--" + boundary).append(LINE);
        writer.append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"").append(LINE);
        writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE);
        writer.append("Content-Transfer-Encoding: binary").append(LINE);
        writer.append(LINE);
        writer.flush();

        FileInputStream inputStream = new FileInputStream(uploadFile);
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, bytesRead);
        }
        outputStream.flush();
        inputStream.close();
        writer.append(LINE);
        writer.flush();
    }
    
    /**
    * 上传内容
    */
	public void addFilePartContent(String fieldName, String fileName, String content)
            throws IOException {
        writer.append("--" + boundary).append(LINE);
        writer.append("Content-Disposition: form-data; name=\"" + fieldName + "\"; filename=\"" + fileName + "\"").append(LINE);
        writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(fileName)).append(LINE);
        writer.append("Content-Transfer-Encoding: binary").append(LINE);
        writer.append(LINE);
        writer.flush();
        writer.append(content);
        writer.append(LINE);
        writer.flush();
    }

    public String finish() throws IOException {
        String response = "";
        writer.flush();
        writer.append("--" + boundary + "--").append(LINE);
        writer.close();

        int status = httpConn.getResponseCode();
        if (status == HttpURLConnection.HTTP_OK) {
            ByteArrayOutputStream result = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int length;
            while ((length = httpConn.getInputStream().read(buffer)) != -1) {
                result.write(buffer, 0, length);
            }
            response = result.toString(this.charset);
            httpConn.disconnect();
        } else {
            throw new IOException("Server returned non-OK status: " + status);
        }
        return response;
    }
	
	public static void testUploadFileLocalFile() {
		try {
		    // 设置header, 里面可以放权限Authorization
		    Map<String, String> headers = new HashMap<>();
		    headers.put("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36");
		    HttpPostMultipart multipart = new HttpPostMultipart("http://localhost:8080/upload/files", "utf-8", headers);
		    multipart.addFormField("data", "1234567");
		    multipart.addFilePart("file", new File("/home/user/test.png"));
		    System.out.println(multipart.finish());
		} catch (Exception e) {
		    e.printStackTrace();
		}
	}
	
	public static void testUploadFileContent() {
		try {
		    // 设置header, 里面可以放权限Authorization
		    Map<String, String> headers = new HashMap<>();
		    headers.put("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36");
		    HttpPostMultipart multipart = new HttpPostMultipart("http://localhost:8080/upload/files", "utf-8", headers);
		    multipart.addFormField("data", "1234567");
		    multipart.addFilePartContent("file", "test.xml", "<?xml version=\"1.0\" encoding=\"UTF-8\"?><test name=\"test\" value=\"1\"></test>"));
		    System.out.println(multipart.finish());
		} catch (Exception e) {
		    e.printStackTrace();
		}
	}
	
	// 测试上传
	public static void main(String[] args) {
		//测试上传本地文件
		testUploadFileLocalFile();
		//测试上传文件具体内容
		testUploadFileContent();
	}
}

到了这里,关于java创建上传文件接口并使用HTTP测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ABAP - 调用HTTP/HTTPS接口上传文件

    如果调用该外部接口是需要使用Oauth2.0的话,可参照该文章里的OAuth2.0的部分: ABAP代码使用OAuth2.0 Client Credential调用外部API 首先,先将文件内容转成binary格式的内表 , 可参照文章: 内表文件的,可参照ABAP - 下载ALV内表 - download ALV internal table SOST里的附件的,可参照ABAP获取发

    2024年02月20日
    浏览(32)
  • Java使用HttpClient以multipart/form-data向接口上传文件

    对接某公司的接口,涉及到资质上传等业务。需要对接他们的上传附件接口。 JDK1.8 httpclient 4.x 因为我方系统需要给前端提供上传接口 使用的 MultipartFile 来接收文件 所以这边需要MultipartFile转下File文件 一顿操作对接完事。肯定有朋友问 为什么不让前端兄弟直接对接呢。因为对

    2024年02月05日
    浏览(46)
  • Spring Boot 笔记 019 创建接口_文件上传

    1.1 创建阿里OSS bucket OSS Java SDK 兼容性和示例代码_对象存储(OSS)-阿里云帮助中心 (aliyun.com) 1.2 编写工具类 1.3 创建文件上传controller 1.4 postman测试

    2024年02月22日
    浏览(37)
  • 接口测试之文件上传

    在日常工作中,经常有上传文件功能的测试场景,因此,本文介绍两种主流编写上传文件接口测试脚本的方法。 首先,要知道文件上传的一般原理: 客户端根据文件路径读取文件内容,将文件内容转换成二进制文件流的格式传输给服务端,而服务端接受客户端传过来的二进

    2024年02月14日
    浏览(21)
  • 使用Java API对HDFS进行如下操作:文件的创建、上传、下载以及删除等操作

    HDFS-JAVA接口:上传文件 将一个本地文件(无具体要求)上传至HDFS中的/hdfs-test路径下(如无此路径,新建一个)。 新建路径:   首先在路径/usr/test/ 下新建test.txt,指令为:/usr/test/test.txt,然后进行上传操作。      2.HDFS-JAVA接口:创建文件 在HDFS中的/hdfs-test路径下新建一个da

    2024年02月07日
    浏览(41)
  • postman测试文件上传接口教程

    postman是一个很好的接口测试软件,有时候接口是Get请求方式的,肯定在浏览器都可以测了,不过对于比较规范的RestFul接口,限定了只能post请求的,那你只能通过工具来测了,浏览器只能支持get请求的接口,而且对于如果要将传参放在body里的,也肯定要通过工具,最近在测接

    2024年02月07日
    浏览(31)
  • 调用hutool包调用http接口处理文件流-文件的上传下载工具类

    hutool工具类get请求获取流: InputStream inputStream = HttpRequest.get(fileUrl).execute().bodyStream(); hutool工具类post请求上传文件流: String resp = HttpRequest.post(url).header(Header.CONTENT_TYPE.getValue(), ContentType.MULTIPART.getValue()).form(params).execute().body(); 完成代码

    2024年01月17日
    浏览(43)
  • 接口自动化测试——文件上传/下载

    我们在做接口自动化测试的时候,经常会碰到 文件上传接口 和 文件下载接口 。 那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 〇、前言 文件上传/下载接口 与 普通接口 类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等

    2024年02月09日
    浏览(34)
  • Postman本地测试上传MultipartFile文件接口

    在请求Body中选择form-data传输类型,填写后端file参数名称,并将参数设置为File类型,这时value输入框将变成文件选择框。 如果此时发送请求给后端,会返回报错request is not a multipart request. 我们还需要将数据传输类型Content-Type设置为multipart/form-data.

    2024年02月12日
    浏览(47)
  • 接口自动化测试:文件上传/下载(最详细)

    我们在做接口自动化测试的时候,经常会碰到文件上传接口和文件下载接口。那么,文件接口跟普通接口有什么区别呢?又该如何实现呢? 文件上传/下载接口与普通接口类似,但是有细微的区别。 如果需要发送文件到服务器,例如:上传文档、图片、视频等,就需要发送二

    2024年02月07日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包