JAVA用post请求上传二进制文件

2021/11/3 9:39:32

本文主要是介绍JAVA用post请求上传二进制文件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

/**
	 * 多文件上传的方法
	 * 
	 * @param actionUrl:上传的路径
	 * @param uploadFilePaths:需要上传的文件路径,数组
	 * @return
	 */
	@SuppressWarnings("finally")
	public static String uploadFile(String actionUrl, String[] uploadFilePaths) {
		String end = "\r\n";
		String twoHyphens = "--";
		String boundary = "*****";
		
		DataOutputStream ds = null;
		InputStream inputStream = null;
		InputStreamReader inputStreamReader = null;
		BufferedReader reader = null;
		StringBuffer resultBuffer = new StringBuffer();
		String tempLine = null;
		
		 try {
			// 统一资源
			 URL url = new URL(actionUrl);
			// 连接类的父类,抽象类
			 URLConnection urlConnection = url.openConnection();
			// http的连接类
			 HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection;
			// 设置是否从httpUrlConnection读入,默认情况下是true;
			 httpURLConnection.setDoInput(true);
			// 设置是否向httpUrlConnection输出
			 httpURLConnection.setDoOutput(true);
			// Post 请求不能使用缓存
			 httpURLConnection.setUseCaches(false);
			// 设定请求的方法,默认是GET
			 httpURLConnection.setRequestMethod("POST");
			// 设置字符编码连接参数
			 httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
			// 设置字符编码
			 httpURLConnection.setRequestProperty("Charset", "UTF-8");
			// 设置请求内容类型
			 httpURLConnection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
			 
			// 设置DataOutputStream
			 ds = new DataOutputStream(httpURLConnection.getOutputStream());
			 for (int i = 0; i < uploadFilePaths.length; i++) {
				 String uploadFile = uploadFilePaths[i];
				 String filename = uploadFile.substring(uploadFile.lastIndexOf("\\") + 1);
				 ds.writeBytes(twoHyphens + boundary + end);
				 ds.writeBytes("Content-Disposition: form-data; " + "name=\"file" + i + "\";filename=\"" + filename
						 + "\"" + end);
				 ds.writeBytes(end); 
				 FileInputStream fStream = new FileInputStream(uploadFile);
				 int bufferSize = 1024;
				 byte[] buffer = new byte[bufferSize];
				 int length = -1;
				 while ((length = fStream.read(buffer)) != -1) {
					 ds.write(buffer, 0, length);
				 }
				 ds.writeBytes(end);
				 /* close streams */
				 fStream.close();
			 }
			 ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
			 /* close streams */
			 ds.flush();
			 if (httpURLConnection.getResponseCode() >= 300) {
				 throw new Exception(
						 "HTTP Request is not success, Response code is " + httpURLConnection.getResponseCode());
			 }
			 if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
				 inputStream = httpURLConnection.getInputStream();
				 inputStreamReader = new InputStreamReader(inputStream);
				 reader = new BufferedReader(inputStreamReader);
				 tempLine = null;
				 resultBuffer = new StringBuffer();
				 while ((tempLine = reader.readLine()) != null) {
					 resultBuffer.append(tempLine);
					 resultBuffer.append("\n");
				 }
			 }
		 }catch(Exception e) {
			 e.printStackTrace();
		 }finally {
			 if (ds != null) {
				 try {
					 ds.close();
				 } catch (IOException e) {
					// TODO Auto-generated catch block
					 e.printStackTrace();
				 }
			 }
			 if (reader != null) {
				 try {
					 reader.close();
				 } catch (IOException e) {
					// TODO Auto-generated catch block
					 e.printStackTrace();
				 }
			 }
			 if (inputStreamReader != null) {
				 try {
					 inputStreamReader.close();
				 } catch (IOException e) {
					// TODO Auto-generated catch block
					 e.printStackTrace();
				 }
			 }
			 if (inputStream != null) {
				 try {
					 inputStream.close();
				 } catch (IOException e) {
					// TODO Auto-generated catch block
					 e.printStackTrace();
				 }
			 }
			 return resultBuffer.toString();
		 }
	}

 转自:【JAVA】通过HttpURLConnection 上传和下载文件(二) - H__D - 博客园 (cnblogs.com)



这篇关于JAVA用post请求上传二进制文件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程