`

java模拟表单上传文件

阅读更多
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

/**
 * 文件上传工具
 * @author cc
 *
 */
public class UploadTools {

		/**
		 * 上传本地文件
		 * @param listPath
		 * @param urlPath
		 * @return
		 */
		 public static String upload(List<String> listPath,String urlPath){
			//返回数据
			StringBuffer msg = new StringBuffer();
			try {
				String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线
				URL url = new URL(urlPath);
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				// 发送POST请求必须设置如下两行
				conn.setDoOutput(true);
				conn.setDoInput(true);
				conn.setUseCaches(false);
				conn.setRequestMethod("POST");
				conn.setRequestProperty("connection", "Keep-Alive");
				conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
				conn.setRequestProperty("Charsert", "UTF-8");
				conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
				OutputStream out = new DataOutputStream(conn.getOutputStream());
				byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线
				int leng = listPath.size();
				for(int i=0;i<leng;i++){
					String fname = listPath.get(i);
					File file = new File(fname);
					StringBuilder sb = new StringBuilder();
					sb.append("--");
					sb.append(BOUNDARY);
					sb.append("\r\n");
					sb.append("Content-Disposition: form-data;name=\"file"+i+"\";filename=\""+ file.getName() + "\"\r\n");
					sb.append("Content-Type:application/octet-stream\r\n\r\n");
					byte[] data = sb.toString().getBytes();
					out.write(data);
					DataInputStream in = new DataInputStream(new FileInputStream(file));
					int bytes = 0;
					byte[] bufferOut = new byte[1024];
					while ((bytes = in.read(bufferOut)) != -1) {
						out.write(bufferOut, 0, bytes);
					}
					out.write("\r\n".getBytes()); //多个文件时,二个文件之间加入这个
					in.close();
				}
				out.write(end_data);
				out.flush();
				out.close();
				// 定义BufferedReader输入流来读取URL的响应
				BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
				String line = null;
				while ((line = reader.readLine()) != null) {
					msg.append(line);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return msg.toString();
		}
	 
		 /**
		 * 上传网络文件
		 * @param listPath
		 * @param urlPath
		 * @return
		 */
		 public static String upload(String fileName,String urlPath,byte[] bytesFile){
			//返回数据
			StringBuffer msg = new StringBuffer();
			try {
				String BOUNDARY = "---------7d4a6d158c9"; // 定义数据分隔线
				URL url = new URL(urlPath);
				HttpURLConnection conn = (HttpURLConnection) url.openConnection();
				// 发送POST请求必须设置如下两行
				conn.setDoOutput(true);
				conn.setDoInput(true);
				conn.setUseCaches(false);
				conn.setRequestMethod("POST");
				conn.setRequestProperty("connection", "Keep-Alive");
				conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
				conn.setRequestProperty("Charsert", "UTF-8");
				conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
				OutputStream out = new DataOutputStream(conn.getOutputStream());
				byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();// 定义最后数据分隔线
				// 数据流部分  //
				StringBuilder sb = new StringBuilder();
				sb.append("--");
				sb.append(BOUNDARY);
				sb.append("\r\n");
				sb.append("Content-Disposition: form-data;name=\"file\";filename=\""+ fileName + "\"\r\n");
				sb.append("Content-Type:application/octet-stream\r\n\r\n");
				byte[] data = sb.toString().getBytes();
				out.write(data);
				//写入文件
				out.write(bytesFile, 0, bytesFile.length);
				out.write("\r\n".getBytes()); //多个文件时,二个文件之间加入这个
				// 数据流部分  //
				out.write(end_data);
				out.flush();
				out.close();
				// 定义BufferedReader输入流来读取URL的响应
				BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
				String line = null;
				while ((line = reader.readLine()) != null) {
					msg.append(line);
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return msg.toString();
		}
	 
	 public static void main(String[] args){
		 List<String> list = new ArrayList<String>();
		 list.add("C:\\Hydrangeas.jpg");
	         UploadTools.upload(list,"http://127.0.0.1/upload/uploadData.do");
	 }
}

 

分享到:
评论

相关推荐

    JAVA表单上传多个文件 java web form表单上传多个文件.zip_form表单post提交

    在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...

    JAVA模拟http上传文件_代码男_新浪博客

    以上就是关于“JAVA模拟http上传文件”的核心知识点。通过理解并实践这些概念,开发者可以构建出稳定、高效的文件上传功能。在实际项目中,还可以结合Spring框架或其他Web库,简化文件上传的实现。

    java代码模拟http上传文件_代码_类包

    压缩包中的"java模式http上传文件_代码_类包"可能包含了具体的示例代码和类库,你可以解压后查看和学习。这些代码可能涵盖了完整的HTTP文件上传流程,包括错误处理和进度反馈等功能,帮助你更好地理解和实现HTTP文件...

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar

    CSharp客户端通过Http模拟表单提交到Java的web服务端.rar C#的wpf客户端使用HttpWebRequest模拟网页表单提交数据到Java的web服务端,Java服务端使用commons-fileupload.jar,Spring接受数据。 *******************...

    java处理文件上传的底层实现以及java模拟post协议实现文件上传

    本篇将详细探讨Java处理文件上传的底层实现,以及如何使用Java模拟POST协议来实现文件上传。 首先,我们需要理解文件上传的基本原理。在HTTP协议中,文件上传通常通过POST请求进行。当用户在表单中选择文件并提交时...

    http模拟POST表单上传文件

    在本文中,我们将深入探讨如何通过模拟POST表单上传文件到服务器,这是一项常见的任务,尤其在开发Web应用程序时。我们将涵盖客户端如何构建请求以及服务器如何接收和处理这些请求。 首先,让我们理解POST请求的...

    JAVA实现模拟导入数据/上传文件进度条

    在文件上传进度条场景下,Servlet主要负责接收上传文件的请求,处理文件,并将文件的处理进度反馈给客户端。 接着,JSP(JavaServer Pages)是用来动态生成HTML页面的,它可以嵌入Java代码,使得页面和业务逻辑结合...

    Android实现表单上传文件

    本文将详细介绍如何在Android中实现表单上传文件,尤其是图片文件。 首先,理解表单上传的基本原理。在Web开发中,HTML的`&lt;form&gt;`标签可以设置`enctype="multipart/form-data"`来支持文件上传。但在Android中,由于...

    模拟表单post提交

    UrlEncodedFormEntity适用于简单的文本数据,而MultiPartEntityBuilder则适合上传文件或者包含复杂格式的数据。 以下是一个基本的示例,展示了如何使用HttpClient模拟POST提交: ```java CloseableHttpClient ...

    HttpClient 模仿表单上传文件

    总的来说,HttpClient提供了一个强大且灵活的API,使得在Java环境中模拟表单上传文件变得容易。它支持多种HTTP方法,可以处理复杂的HTTP头和实体,是进行HTTP通信的理想选择。通过理解multipart/form-data编码和...

    使用apache httpcomponents 模拟html表单上传文件

    在IT行业中,网络编程是不可或缺的一部分,而模拟HTML表单上传文件是常见的需求,尤其是在进行自动化测试、数据抓取或API交互时。Apache HttpComponents 是一个强大的Java库,提供了全面的HTTP客户端支持,包括文件...

    在一个form表单里同时上传多个文件和文本信息的解决方案

    请上传文件 文件1:&lt;input type="file" name="file"/&gt;&lt;br&gt; 文件2:&lt;input type="file" name="file1"/&gt;&lt;br&gt; 描述:&lt;textarea name="description" rows="5" cols="30"&gt;&lt;/textarea&gt; 上传"&gt; ``` 此表单允许...

    java-web上传文件实例

    通过模拟不同大小、类型的文件上传,确保程序能正确处理各种情况。 11. **性能优化**:对于大量文件上传,可以考虑异步处理、批量操作,或者使用分块上传技术以减轻服务器负担。 12. **前端交互**:使用JavaScript...

    extjs java 上传文件进度条

    总结来说,"extjs java 上传文件进度条"这个主题涉及到前端与后端的交互,需要理解ExtJS组件的使用,熟悉Ajax异步上传,掌握Java服务器处理文件上传的逻辑,以及HTTP协议、JSON通信等相关知识。通过这些技术的结合,...

    springMVC 文件上传jar文件及源码

    -- 设置最大上传文件大小,单位为MB --&gt; ``` 2. **控制器方法**:在控制器类中,我们可以定义一个处理文件上传的@RequestMapping方法。这个方法的参数通常是`MultipartFile`或其数组,Spring MVC会自动将请求...

    SpringBoot 实现文件上传到本地目录 并返回可访问的文件地址.rar

    在Spring Boot应用中,文件上传是一项常见的功能,它允许用户通过Web接口上传文件,并将这些文件存储在服务器的本地目录中。本项目的核心是利用Spring Boot的MVC特性来处理文件上传请求,以及构建一个安全、可靠且...

    springboot单文件和多文件上传示例

    这个接口是`java.io.InputStream`的子接口,封装了上传文件的相关信息,如文件名、大小、内容等。 2. **配置文件**: 在`application.properties`或`application.yml`中,我们需要配置文件上传的相关参数,如最大...

    为测试Java上传文件源地址做测试

    标题所描述的内容主要涉及到对Java上传文件功能的测试工作。在软件开发和维护过程中,测试是一个非常关键的步骤,它可以帮助开发者和测试者发现软件中存在的缺陷和问题,确保软件的质量。特别是对于上传文件功能,它...

    struct文件上传功能

    在文件上传的场景中,`struct`可能用于存储关于上传文件的信息,如文件名、大小、类型等。 文件上传通常涉及以下几个关键步骤: 1. **前端交互**:在用户界面,提供一个表单供用户选择要上传的文件。这个表单通常...

Global site tag (gtag.js) - Google Analytics