HTTP:http上传文件的原理及java处理方法的介绍

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

为了说明原理,以下提供一个可以上传多个文件的例子,html页面代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>http upload file</title>
</head>
<body>
	<form action="/TestWeb/upload" method="post" enctype="multipart/form-data">
		<input type="text" name="uploadName1" id="uploadName1">
		<p />
		<input type="file" name="fileName1" id="file1">
		<p />
		<input type="text" name="uploadName2" id="uploadName2">
		<p />
		<input type="file" name="fileName2" id="file2">
		<p />
		<input type="submit" value="上传">
	</form>
</body>
</html>

 显示效果如下:

HTTP:http上传文件的原理及java处理方法的介绍,HTTP,Java,spring,http,java

 通过点“浏览”选择要上传的文件,并分别输入保存时使用的文件名:

HTTP:http上传文件的原理及java处理方法的介绍,HTTP,Java,spring,http,java

 我们使用spring来处理上传的文件,代码如下:

import java.io.IOException;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

@Controller
public class FileUploadController {

	@PostMapping("/upload")
	public String handleFormUpload(//
			@RequestParam("uploadName1") String uploadName1, //
			@RequestPart("fileName1") MultipartFile file1, //
			@RequestParam("uploadName2") String uploadName2, //
			@RequestPart("fileName2") MultipartFile file2) throws IOException {

		print(file1, uploadName1);

		System.out.println("+++++++++++++++");
		
		print(file2, uploadName2);

		return "redirect:upload";
	}

	private void print(MultipartFile file, String uploadName) throws IOException {
		String contentType = file.getContentType();
		String name = file.getName();
		String originalFilename = file.getOriginalFilename();
		long size = file.getSize();

		byte[] bytes = file.getBytes();

		System.out.println(uploadName);
		System.out.println(contentType);
		System.out.println(name);
		System.out.println(originalFilename);
		System.out.println(size);
		System.out.println(bytes.length);
	}
}

 为了能使以上代码正常运行,还要做一些配置。比如,如果使用servlet3.0作为底层处理组件,还需要使用如下代码做配置:

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 

    @Override
    protected void customizeRegistration(ServletRegistration.Dynamic registration) {

        // Optionally also set maxFileSize, maxRequestSize, fileSizeThreshold
        registration.setMultipartConfig(new MultipartConfigElement("/tmp"));
    }

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return null;
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return null;
	}

	@Override
	protected String[] getServletMappings() {
		return null;
	}
}

 点击“上传”,打印日志如下:

report.txt
text/plain
fileName1
report.txt
31
31

+++++++++++++++
temp.txt
text/plain
fileName2
temp.txt
284
284

 如果使用拦截工具,可以获取到如下上传报文:

POST /TestWeb/upload HTTP/1.1
Host: 127.0.0.1:9090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=---------------------------38678334721585548371903973726
Content-Length: 951
Origin: http://127.0.0.1:9090
Connection: keep-alive
Referer: http://127.0.0.1:9090/TestWeb/index.html

-----------------------------38678334721585548371903973726
Content-Disposition: form-data; name="uploadName1"

report.txt
-----------------------------38678334721585548371903973726
Content-Disposition: form-data; name="fileName1"; filename="report.txt"
Content-Type: text/plain

工作计划和工作总结


-----------------------------38678334721585548371903973726
Content-Disposition: form-data; name="uploadName2"

temp.txt
-----------------------------38678334721585548371903973726
Content-Disposition: form-data; name="fileName2"; filename="temp.txt"
Content-Type: text/plain

java.lang.IncompatibleClassChangeError:Expected non-static field org.springframework.web.reactive.result.method.InvocableHandlerMethod.logger
        at org.springframework.web.reactive.result.method.InvocableHandlerMethod.logArgumentErrorIfNecessary(InvocableHandlerMethod.java:207)
        

-----------------------------38678334721585548371903973726--

 其中,黄色表示分隔线,绿色是上传的文件内容,蓝色是额外上传的文件名,红色是实际文件名。

 通过打印的日志和拦截的报文,结合代码,就可以知道整个上传的处理过程。

以上是通过html页面上传文件,其实也可以不用页面也可以实现html上传,比如使用postman或curl。下面使用cur可以实现与html页面相同的功能:

curl -v http://127.0.0.1:9090/TestWeb/upload

-F "fileName1=@/D/Temp/temp.txt"

-F "uploadName1=temp.txt"

-F "fileName2=@/D/Temp/report.txt"

-F "uploadName2=report.txt"文章来源地址https://www.toymoban.com/news/detail-680278.html

到了这里,关于HTTP:http上传文件的原理及java处理方法的介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • java http请求url有空格,通过unicode方法处理

    在Java中,可以通过Unicode编码来处理URL中的空格等特殊字符,将其转换为%xx的形式。下面是一个处理示例: 以上代码中,我们使用了URLEncoder.encode()方法将URL中的特殊字符进行编码,并将所有的+替换为%20,表示空格的编码。使用时,只需要传入需要编码的URL即可,例如: 输出

    2024年02月12日
    浏览(42)
  • python http文件上传

    server端代码

    2024年02月11日
    浏览(34)
  • http文件上传下载方案

    后端生成文件,返回二进制给前端 案例 设置 Content-Type 未对应文件的 MIME类型 将文件内容二进制写入http body 后端返回数据,前端生成文件 案例报文:

    2024年02月12日
    浏览(50)
  • C#HTTP文件上传和参数

    背景:公司系统服务接口是Restful API,商户有用Java、PHP、C#来对接的,这时,公司就需要提供相应编程语言的demo了。 在这里是来介绍本次C#编程语言demo所遇到的其中一些情况,主要内容:HTTP文件上传和参数。 指的是上传附件,并且同时带有其他请求参数的接口。 代码如下(

    2024年02月13日
    浏览(30)
  • mongoose库实现http文件上传

    常用于url链接和application/x-www-form-urlencoded格式的请求体中对参数进行编码 由于url的参数的样子是key1=value1key2=value2,如果key或者value中包含= 等字符,就会导致解析时混乱了,因此需要一种编码来把这些可能引起歧义的符号替换掉 例如:http://localhost/src/components/global/Checkbox.vu

    2024年02月14日
    浏览(31)
  • [Python http.server] 搭建http服务器用于下载/上传文件

    动机: 笔者需测试bs架构下的文件上传与下载性能,故想通过Python搭建http服务器并实现客户端与服务器之间的文件上传和下载需求 难点: 这应该是很基础的东西,不过笔者之前未接触过http编程,谨在此记录下学习的过程,可能不是最优解 方法: 在服务器端部署html页面,并

    2024年02月11日
    浏览(42)
  • Golang Gin框架HTTP上传文件

    HTTP上传的文件的原理 HTTP协议的文件上传是通过HTTP POST请求实现的,使用multipart/form-data格式将待上传的文件放入请求体中。 服务器根据请求头中的boundary参数来解析请求体,并根据Content-Disposition字段获取文件名等信息,根据Content-Type字段判断文件类型并保存到相应位置。

    2024年02月05日
    浏览(38)
  • 【UE】HTTP接口上传文件_文件作为入参

    假设需要在UE中发送下方接口传输文件 使用From-data格式 在请求头Content-Type中加入间隔符Boundary 使用LoadFileToArray()读取文件,并加入分隔符、文件头等内容 转成字节 作为Content 创建BlueprintFunctionLibrary蓝图函数库 对应Build.cs中加入Http模块 增加函数 .h中 .cpp中 函数前改为自己的函

    2024年02月03日
    浏览(40)
  • 通过HttpPost发送http请求实现文件上传

    通过HttpPost发送http请求,实现postman上传文件效果 需要引入: ** 关键代码:multipartEntityBuilder.addBinaryBody ** 如还需传入其他文本参数:如下图 本人亲自验证有效。

    2024年02月12日
    浏览(37)
  • 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日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包