`
lovelease
  • 浏览: 385964 次
社区版块
存档分类
最新评论

Http一次上传多个文件(类型可以不同)的方式

阅读更多
Http上传中Header信息内要指定ContentType以告知浏览器你所上传的文件类型,如果需要在一次request中上传多个文件(甚至可以是多种文件类型),就可以使用CONTENT_TYPE = "multipart/form-data"这种混编格式来完成,具体做法可以参照示例代码,而相关的介绍则可以参看:

关于混编格式
multipart/form-data官方介绍
关于Java UUID

package com.example.pmudemo.helper;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.UUID;

import android.util.Log;

/**
 * Message upload helper class
 * 
 * @author weishijie
 *
 */
public class UploadHelper {

	private static final String TAG = "UploadHelper";
	/**
	 * Timeout
	 */
	private static final int TIME_OUT = 5 * 1000;
	/**
	 * Charset
	 */
	private static final String CHARSET = "utf-8";

	/**
	 * Upload file to server
	 * 本方法采用“混编格式”实现上传
	 * 混编格式,即混合多种资料格式并一次传送,当然非文字资料必须要编码为二进制字符串
	 * 参考:http://www.cnblogs.com/shanyou/archive/2013/06/07/3123155.html
	 * 
	 * @param file file need to upload
	 * @param RequestURL request url
	 * @return response string
	 */
	public static String uploadFile(File file, String requestURL)
	{
		String result = null;
		/*UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,
		它保证对在同一时空(3240年)中的所有机器都是唯一的。UUID一般形如下例:
		550E8400-E29B-11D4-A716-446655440000*/
		// 边界标识 随机生成
		String BOUNDARY = UUID.randomUUID().toString();
		String PREFIX = "--";
		String LINE_END = "\r\n";
		String CONTENT_TYPE = "multipart/form-data";

		try
		{
			URL url = new URL(requestURL);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setReadTimeout(TIME_OUT);
			conn.setConnectTimeout(TIME_OUT);
			// Allow input
			conn.setDoInput(true);
			// Allow output
			conn.setDoOutput(true);
			// Forbidden cache
			conn.setUseCaches(false);
			conn.setRequestMethod("POST");
			// Set request header field
			conn.setRequestProperty("Charset", CHARSET);
			conn.setRequestProperty("connection", "keep-alive");
			conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary="
					+ BOUNDARY);

			if (file != null)
			{
				/**
				 * 当文件不为空,把文件包装并且上传
				 */
				DataOutputStream dos = new DataOutputStream(
						conn.getOutputStream());
				StringBuffer sb = new StringBuffer();
				sb.append(PREFIX);
				sb.append(BOUNDARY);
				sb.append(LINE_END);
				/**
				 * 这里重点注意: name里面的值为服务器端需要key 只有这个key 才可以得到对应的文件
				 * filename是文件的名字,包含后缀名的 比如:abc.png
				 */

				sb.append("Content-Disposition: form-data; name=\"log\"; filename=\""
						+ file.getName() + "\"" + LINE_END);
				sb.append("Content-Type: application/octet-stream; charset="
						+ CHARSET + LINE_END);
				sb.append(LINE_END);
				dos.write(sb.toString().getBytes());
				InputStream is = new FileInputStream(file);
				byte[] bytes = new byte[1024];
				int len = 0;
				while ((len = is.read(bytes)) != -1)
				{
					dos.write(bytes, 0, len);
				}
				is.close();
				dos.write(LINE_END.getBytes());
				byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINE_END)
						.getBytes();
				dos.write(end_data);
				dos.flush();
				/**
				 * 获取响应码 200=成功 当响应成功,获取响应的流
				 */
				int res = conn.getResponseCode();
				Log.i(TAG, "response code:" + res);
				Log.i(TAG, "request success");
				InputStream input = conn.getInputStream();
				StringBuffer sb1 = new StringBuffer();
				int ss;
				while ((ss = input.read()) != -1)
				{
					sb1.append((char) ss);
				}
				result = sb1.toString();
				Log.i(TAG, "result : " + result);
			}else{
				return null;
			}
		} catch (MalformedURLException e)
		{
			e.printStackTrace();
			return null;
		} catch (IOException e)
		{
			e.printStackTrace();
			return null;
		} catch (Exception e)
		{
			e.printStackTrace();
			return null;
		}
		return result;
	}
}

分享到:
评论

相关推荐

    asp.net一次性上传多个文件

    在ASP.NET中,文件上传是一个常见的需求,尤其是当用户需要一次性上传多个文件时。本文将深入探讨如何在ASP.NET中实现多文件上传功能。 首先,我们需要了解ASP.NET中的文件上传控件`<input type="file">`。在HTML...

    一次选择多个文件进行批量上传

    传统的HTML表单上传方式通常只能处理单个文件,但随着技术的发展,现在我们可以使用Ajax多文件上传组件来实现一次选择并上传多个文件的功能。这种组件不仅提高了用户体验,还允许在不刷新页面的情况下完成文件上传,...

    asp一次性上传多个文件

    标题"asp一次性上传多个文件"和描述"asp.net(c#)一次上传多个文件"指的是在ASP.NET环境中使用C#代码实现用户一次选择并上传多个文件的功能。 在ASP.NET中,我们可以利用HTML5的多文件选择功能,配合C#后端处理,...

    JavaScript上传多个文件

    在JavaScript中实现多文件上传是一项常见的前端开发任务,尤其在现代网页应用中,用户往往需要一次性上传多个图片、文档或其他类型的文件。这个标题为“JavaScript上传多个文件”的资源,显然提供了一个简洁而实用的...

    uploadify支持一次选择多个文件且批量上传

    "uploadify"是一款基于jQuery的插件,它为网页提供了强大的文件上传功能,包括一次选择多个文件和批量上传的能力。这些特性极大地提高了用户上传文件的效率,减轻了他们的操作负担。 "uploadify"的多选功能允许用户...

    jquery uploadify实现一次选择多个文件上传

    为了提升用户体验,我们通常会采用一次选择多个文件进行上传的功能。jQuery Uploadify插件就是一个优秀的解决方案,它能够帮助开发者轻松地实现这一功能。本文将详细介绍如何使用jQuery Uploadify来实现一次性选择并...

    一次选择多个文件上传+图片预览。HTML5源代码支持PC浏览器端和手机移动端.zip

    本资源"一次选择多个文件上传+图片预览。HTML5源代码支持PC浏览器端和手机移动端.zip"提供了一个实用的解决方案,它利用HTML5的新特性实现了跨平台的多文件选择上传和图片预览功能,适应于PC和移动设备。 首先,...

    上传多个文件

    在IT领域,上传多个文件是一项常见的操作,尤其在网页或应用程序中。这一功能使得用户能够一次性上传多个文档、图片或其他类型的文件,极大地提高了效率。在本文中,我们将深入探讨实现这个功能的技术细节、相关技术...

    HTML多文件上传插件,可一次上传多个文件.zip

    "multiple.txt"则提示我们可以使用HTML5的`multiple`属性来允许用户选择并上传多个文件。在`<input type="file">`标签中添加`multiple`属性,用户就能在文件选择对话框中选取多个文件了。 "使用jQuery插件jQuery....

    多文件上传,并显示每一个的进度

    在现代Web应用中,用户可能需要一次性上传多个文件,例如图片、文档或视频。这个过程如果能实时显示每个文件的上传进度,将极大地提升用户体验。本文将深入探讨如何实现"多文件上传,并显示每一个的进度"这一功能,...

    Uploadify 多文件上传,可设置文件类型

    1. **多文件上传**:Uploadify 支持用户同时选择并上传多个文件,极大地提高了上传效率。用户只需一次操作即可完成批量上传,比传统的单个文件上传更便捷。 2. **文件类型限制**:一个重要的特性是,你可以通过配置...

    JSP同时选择多文件上传MultifileUploadDemo

    在多文件上传场景下,Flash允许用户一次性选择多个文件,提供了一种友好的用户体验。Flash上传工具通常通过ActionScript(Flash的编程语言)编写,它可以控制文件的选取、上传过程,并且可以显示上传进度,提升用户...

    status上传多文件

    "status上传多文件"这个标题暗示了我们正在讨论一个支持批量或同时上传多个文件的系统或者功能。在这个场景下,"status"可能指的是文件上传的状态跟踪,比如上传进度、成功与否等。"上传2多文件"可能是对这个功能的...

    Asp.net同时上传多个文件

    这个功能使得用户能够一次性上传多个文件,提高了用户体验。在本文中,我们将深入探讨如何在Asp.net环境下实现这个功能。 首先,我们需要了解Asp.net中的文件上传基础。在Asp.net中,文件上传主要通过`<input>`标签...

    一次性上传多个文件的源码ASP.NETC#

    在ASP.NET C#环境下,一次性上传多个文件的功能是常见的需求,尤其在文件管理、数据导入等场景中。本文将深入探讨如何实现这个功能,并提供相关的源码解析。 首先,我们需要了解ASP.NET中的FileUpload控件。...

    Flash多文件大文件上传自定义文件类型

    首先,**多文件上传**是指允许用户一次性选择并上传多个文件的功能。这种功能在社交媒体、文档共享、图片库等应用中非常常见。通过Flash,开发者可以创建一个界面,让用户方便地拖放或选择多个文件进行批量上传,...

    element-ui+vue单文件上传和 多文件批量上传(多文件走一次接口).pdf

    对于多文件批量上传,我们可以设置`multiple`属性为`true`,允许用户选择多个文件。但问题在于,Element UI默认情况下会为每个文件发送一个单独的请求。为了实现多文件一次接口上传,我们需要在`before-upload`事件...

    False 多上传 弹出框可以选择多个文件

    1. **多文件选择**:用户可以通过弹出的文件选择对话框一次性选取多个文件进行上传。 2. **进度条显示**:在上传过程中,Uploadify可以显示每个文件的上传进度,提升用户体验。 3. **自定义界面**:开发者可以根据...

    JSP多文件上传(同时上传)

    这个功能允许用户一次性选择并上传多个文件,提高了用户体验,减少了多次点击和等待时间。 实现JSP多文件上传,我们需要了解以下几个关键知识点: 1. **HTML表单与多文件选择**: 在HTML中,`<input type="file">...

    c# 使用WebRequest实现多文件上传.docx

    为了实现多文件上传,我们需要封装多个文件参数。我们可以使用 List<KeyValue> 来存储文件参数,每个 KeyValue 对象都包含文件的名称、文件路径和 Content-Type 等信息。然后,我们可以使用 foreach 循环来遍历文件...

Global site tag (gtag.js) - Google Analytics