`
shendixiong
  • 浏览: 399459 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论
阅读更多
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Map;

import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

public class HttpRequestUtils {
	public static HttpResponse getHttpResponse(String url, Map<String, String> params) throws Exception{
		HttpParams httpParameters = new BasicHttpParams();
		HttpConnectionParams.setConnectionTimeout(httpParameters, 2 * 60 * 100);
		HttpConnectionParams.setSoTimeout(httpParameters, 2 * 60 * 100);
		DefaultHttpClient client = new DefaultHttpClient(httpParameters);
		HttpGet httpGet = new HttpGet(new URI(url));
		for(Map.Entry<String, String> entry : params.entrySet()){
			httpGet.setHeader(entry.getKey(), entry.getValue());
		}
		return client.execute(httpGet);
	}
	
	public static HttpURLConnection getUrlConnection(String url, int bufferSize) throws Exception{
		URL target = new URL(url);
		HttpURLConnection conn = (HttpURLConnection) target.openConnection();
		conn.setConnectTimeout(30000);
		conn.setReadTimeout(30000);
		conn.setDoOutput(true);
		conn.setDoInput(true);
		conn.setUseCaches(false);
		conn.setRequestMethod("POST");
		conn.setRequestProperty("connection", "Keep-Alive");
		conn.setChunkedStreamingMode(bufferSize);
		conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
		conn.setRequestProperty("Charsert", "UTF-8");
		conn.setRequestProperty("contentType", "UTF-8");
		conn.setRequestProperty("timenow", String.valueOf(System.currentTimeMillis()));
		return conn;
	}
	
	
}

 

 

上传文件流关键代码:

 

private static void uploadFile() throws Exception
	{
		//BUFFER_SIZE = 16 * 1024 ;
		File file = new java.io.File("D:/workbook.xlsx");
		SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
		HttpURLConnection conn=HttpRequestUtils.getUrlConnection("http://localhost:7080/test/FileUploadAndDownloadServlet", Constants.BUFFER_SIZE);
		conn.setRequestProperty("type","1");
		conn.setRequestProperty("source", "3486123"); //文件目录
		conn.setRequestProperty("range", String.valueOf(0)); 
		conn.setRequestProperty("filename", "dison.xlsx"); //文件名称
		conn.setRequestProperty("totalsize", String.valueOf(file.length())); //文件大小
		conn.setRequestProperty("tousername", "dison"); //接收者
		conn.setRequestProperty("fromusername", "dison1");//发送者
		
		RandomAccessFile randomAccessFile=new RandomAccessFile(file, "rw"); //文件流key
		OutputStream out = new DataOutputStream(conn.getOutputStream());
		
		int j=0;
		byte[] buf = new byte[Constants.BUFFER_SIZE];
		int nRead=0;
		try {
			randomAccessFile.seek(Long.valueOf(0));//设置文件指针
			while((nRead=randomAccessFile.read(buf,0,Constants.BUFFER_SIZE)) > 0)
			{
				out.write(buf,0,nRead);
				j += nRead;
			}
			out.close();
			randomAccessFile.close();
		} catch (NumberFormatException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			try {
				randomAccessFile.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
			
		 	out.flush();
		 	out.close();
		 	// 定义BufferedReader输入流来读取URL的响应
		 	BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8"));
		 	String line = null;
		 	while ((line = reader.readLine()) != null) {
		 		System.out.println(line);
		 	}
	
	}

 

接收文件流 (关键代码)部分代码:

主要逻辑:

1.首先确定你创建的目录是否存在。没有就创建

2.通过文件流的key读取流,创建文件

RandomAccessFile randomAccessFile;
		try {
			randomAccessFile = new RandomAccessFile(destfile, "rw");
		} catch (FileNotFoundException e) {
			logger.error(e);
			fileUploadResult = new FileUploadResult(false,FileBizCodeConstants.FILEID_UNEXIST, "文件未找到");
			return fileUploadResult;
		}
		byte[] buf = new byte[FileBizCodeConstants.BUFFER_SIZE];
		int nRead;
		int stu=0;
		
			
			randomAccessFile.seek(Long.valueOf(range));//设置文件指针
			while((nRead=is.read(buf,0,FileBizCodeConstants.BUFFER_SIZE)) > 0&&stu==0)
			{
				randomAccessFile.write(buf,0,nRead);
				l += nRead;
			}
		

 

分享到:
评论

相关推荐

    Curl实现Get下载zip文件、post上传zip文件、普通post请求等

    POST上传文件时,你需要提供文件内容和对应的文件名。通过`CURLOPT_POSTFIELDS`选项设置POST数据,对于文件上传,通常需要将文件读取到内存中,然后传递给Curl。Curl会自动处理文件内容的编码和传输。同时,可能还...

    Java模拟post请求传上传文件、下载文件、

    Java模拟post请求传上传文件(文件流做参)、下载文件、好使的。

    http post方式上传文件(C#)

    为了实现“不受大小限制”的文件上传,我们需要确保服务器端的配置允许接收大文件,并在客户端代码中处理大文件流。这可能涉及分块上传或使用流处理技术,以避免一次性加载整个文件到内存中。 在上传过程中显示进度...

    java post文件流的操作

    #### 3.1 获取上传文件 - `MultipartHttpServletRequest`:这是一个扩展了普通`HttpServletRequest`的接口,用于处理多部分数据,如表单字段和文件。 - `getFile()`:通过该方法可以获取上传的文件对象`...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    精讲RestTemplate文件上传下载与大文件流式下载.docx

    根据提供的文档标题、描述、标签以及部分内容,本文将详细介绍如何使用Spring框架中的`RestTemplate`进行文件...这些操作对于构建现代Web应用非常关键,特别是在处理大量用户上传文件或提供文件下载服务时尤为重要。

    httpClient post 上传 下载 图片

    - 接着,创建一个`MultipartEntityBuilder`,它可以处理多部分的HTTP请求,非常适合上传文件。通过`addBinaryBody`方法添加图片文件,指定文件名和文件内容。 - 将`MultipartEntityBuilder`构建的实体设置到`...

    c++文件post上传服务器

    对于文件上传,通常会将文件内容转换为二进制流,并添加到请求体中。 2. **库的使用**: 在VC6.0环境下,由于标准库并不直接支持网络编程,我们通常需要使用第三方库,如libcurl或WinInet。这些库提供了API接口,...

    易语言POST百度上传图片

    在互联网编程中,POST请求常用于向服务器发送数据,比如上传文件。下面将详细阐述这一过程涉及的关键知识点。 1. **HTTP协议与POST请求**: - HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,用于从...

    Qt之 Post方法上传图片到服务器两种方式Base64流和File

    在Qt框架中,进行HTTP POST请求来上传图片到服务器主要有两种常见的方式:Base64编码流和直接上传文件。这两种方法各有优缺点,适用于不同的场景。下面将详细讲解这两种方式的实现过程及其特点。 首先,我们来看...

    C代码版本的HTTP POST上传文件/JSON

    3. **文件上传**:在HTTP POST请求中上传文件,需要将文件内容编码成二进制流,并在Content-Type头中指定`multipart/form-data`。每个文件都应包含一个边界标识符,以区分不同的文件或字段。 4. **JSON数据**:JSON...

    Android网络框架Retrofit2使用封装:Get/Post/文件上传/下载

    框架主要包括:Get请求、Post请求、文件上传、文件下载。效果图及讲解见:https://blog.csdn.net/ahuyangdong/article/details/82760382。github源码:https://github.com/ahuyangdong/RetrofitFrame

    获取上传文件的流

    在IT行业中,尤其是在Web开发领域,获取上传文件的流是一个重要的操作。这通常涉及到处理用户通过表单上传的文件,例如图片、文档或其他类型的二进制数据。在本篇文章中,我们将深入探讨如何在不同的编程语言和框架...

    C++使用libcurl提供的API上传文件且Post表单数据

    在这个场景中,我们将深入探讨如何利用libcurl在C++中上传文件并发送POST表单数据。 首先,`con_test.cpp`是主要的源代码文件,它包含了使用libcurl进行文件上传和POST操作的具体实现。`StdAfx.cpp`和`StdAfx.h`是...

    上传和下载并通过流把文件进行输出

    本文将详细阐述如何实现文件的上传、下载以及通过流进行输出,以满足用户对图片和文件操作的需求。 首先,我们要了解什么是文件上传。文件上传是指用户通过网页或应用程序将本地计算机上的文件传输到服务器的过程。...

    POST提交文件也接收文件

    标题"POST提交文件也接收文件"指的是通过HTTP POST请求来上传文件,并同时处理接收到的文件。这个过程涉及到客户端(如浏览器)与服务器之间的交互,以及C#后端代码的实现。 首先,我们需要了解HTTP POST请求。POST...

    post提交,图片以文件流形式上传并保存到数据库

    在Web表单提交中,如果用户需要上传文件,通常会使用POST请求,因为GET请求可能受到URL长度限制,并且不适合传输大体积的数据,如图片。 2. **文件流(File Stream)**: 文件流是处理文件的一种抽象概念,它允许...

    HttpClient实现POST GET和文件下载

    它提供了丰富的API,使得开发者可以方便地发送...无论是简单的GET和POST请求,还是复杂的文件上传和下载,都可以通过其丰富的API来实现。在使用过程中,注意合理的错误处理和资源管理,可以提升代码的健壮性和效率。

    HTTP上传和下载C++封装类支持GET、POST多种方式

    对于上传功能,尤其是上传二进制数据,如图片或文件,需要将文件内容读取并转换为字节流,然后通过POST请求发送。C++可以使用`fstream`库来读取文件,并结合`std::stringstream`处理字节流。在`HttpConnection`类中...

Global site tag (gtag.js) - Google Analytics