java post 二进制上传_java http上传服务器实现,multipart boundary post等.

本文详细介绍了如何使用Java进行HTTP的二进制文件上传,涉及到multipart/form-data编码,rfc1867协议,以及客户端发送内容的构造方法。通过示例展示了如何在Servlet中处理文件上传,并提供了POST请求的实现方式。
摘要由CSDN通过智能技术生成

含义 ENCTYPE="multipart/form-data" 说明:

通过 http 协议上传文件 rfc1867协议概述,jsp 应用举例,客户端发送内容构造

1、概述在最初的 http 协议中,没有上传文件方面的功能。 rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) 为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来的文件。Microsoft IE, Mozila, Opera 已经支持此协议,在网页中使用一个特殊的 form 就可以发送文件。绝大部分 http server ,包括 tomcat ,已经支持此协议,可接受发送来的文件。各种网页程序,如 php, asp, jsp 中,对于上传文件已经做了很好的封装。

2、上传文件的实例:用 servelet 实现(http server 为 tomcat 4.1.24)1. 在一个 html 网页中,写一个如下的form :

load multi files :

text field :

用户可以选择多个文件,填写表单其它项,点击“提交”按钮后就开始上传给 http://192.168.29.65/upload_file/UploadFile

这是一个 servelet 程序注意 enctype="multipart/form-data", method=post, type="file" 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型,以提高二进制文件的传输效率。具体的解释请参阅 rfc18672. 服务端 servelet 的编写现在第三方的 http upload file 工具库很多。Jarkata 项目本身就提供了fileupload 包http://jakarta.apache.org/commons/fileupload/ 。

文件上传、表单项处理、效率问题基本上都考虑到了。在 Struts 中就使用了这个包,不过是用 Struts 的方式另行封装了一次。这里我们直接使用 fileupload 包。至于Struts 中的用法,请参阅 Struts 相关文档。这个处理文件上传的 servelet 主要代码如下:

public void doPost( HttpServletRequest request, HttpServletResponse response )

{

DiskFileUpload diskFileUpload = new DiskFileUpload();    // 允许文件最大长度

diskFileUpload.setSizeMax( 100*1024*1024 );    // 设置内存缓冲大小

diskFileUpload.setS

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Java 中的 HttpURLConnection 类来发送 HTTP POST 请求,将文件以二进制流的形式传输。以下是一个示例代码: ```java import java.io.*; import java.net.HttpURLConnection; import java.net.URL; public class HttpBinaryPost { public static void main(String[] args) throws Exception { String url = "http://example.com/upload"; File file = new File("example.pdf"); // Create a boundary string String boundary = Long.toHexString(System.currentTimeMillis()); // Set the content type to multipart/form-data with the specified boundary String contentType = "multipart/form-data; boundary=" + boundary; URL connectionUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) connectionUrl.openConnection(); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", contentType); // Open a stream to write the request body OutputStream outputStream = conn.getOutputStream(); PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, "UTF-8"), true); // Write the boundary and content disposition header writer.append("--" + boundary).append("\r\n"); writer.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getName() + "\"").append("\r\n"); // Write the content type writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(file.getName())).append("\r\n"); writer.append("Content-Transfer-Encoding: binary").append("\r\n"); writer.append("\r\n"); // Write the file content FileInputStream inputStream = new FileInputStream(file); byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } // Write the end of the boundary writer.append("\r\n"); writer.append("--" + boundary + "--").append("\r\n"); // Close the streams inputStream.close(); outputStream.close(); writer.close(); // Read the response from the server BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } reader.close(); } } ``` 在上面的代码中,我们首先创建一个 HttpURLConnection 对象并设置请求的方法和请求头部。然后我们打开一个输出流并使用 PrintWriter 对象将请求体写入流中。我们首先写入一个边界字符串,然后写入文件的内容类型和文件名。接下来,我们使用 FileInputStream 读取文件内容并将其写入输出流中。最后,我们写入请求体的结束边界并关闭流。最后,我们读取服务器的响应并打印出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值