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;
}
}
分享到:
相关推荐
一次上传多个文件。 允许得到上传的文件的原文件名,并可以将文件改名存入服务器。 允许设定每次上传文件的总大小,和单个文件的文件大小。 可以设定只被允许文件后缀名列表。 可以设定只被允许的文件类型列表。...
在Editview中可以一次插入多种相同类型的文件(如多个附件、多个相册的图片、多个拍照的图片以及多个录音的文件),同时拍照的图片会默认存储在sd中新建的文件夹下面,以及可以点击查看上传的文件(包括附件、相册、...
一次上传多个文件。 允许得到上传的文件的原文件名,并可以将文件改名存入服务器。 允许设定每次上传文件的总大小,和单个文件的文件大小。 可以设定只被允许文件后缀名列表。 可以设定只被允许的文件类型...
一次上传多个文件。 允许得到上传的文件的原文件名,并可以将文件改名存入服务器。 允许设定每次上传文件的总大小,和单个文件的文件大小。 可以设定只被允许文件后缀名列表。 可以设定只被允许的文件类型...
在Editview中可以一次插入多种相同类型的文件(如多个附件、多个相册的图片、多个拍照的图片以及多个录音的文件),同时拍照的图片会默认存储在sd中新建的文件夹下面,以及可以点击查看上传的文件(包括附件、相册、...
uniapp前端单文件上传JAVA后台接收实现(亲测),还有单文件上传亲测哦,可以都看看,研究了一天,终于搞定,支持原创
4. 文件上传,可以一次按顺序上传多个超大文件。 5. 组件完全采用多线程方式上传,达到更高性能。 6. 支持进度事件信息及百分比显示。 7. 支持简洁高效的JAVASCRIPT编程接口。 8. 支持过滤文件大小,文件总数量,...
而且一次只能有一个文件上传。设计的时候估计是希望一个文件可以被多个页面所引用。但实际情况通常不会这样。 针对以上问题,查询并测试了很多方法,网上的介绍五花八门,很多还过时了。把我的经验和大家分享一下,...
1,能够一次性选择多个文件上传,查看上传进度,控制文件上传类型和大小,为每一步操作添加回调函数等。该插件还自带一个PHP文件用于服务器端处理上传文件。 2, uploadifive控件是基于HTML5而不用支持falsh(可以...
前面上传过一次,不能编辑了,重新上传...和前面那个相比,代码优化了一下:1)上传和下载完成的时候关闭FileStream(不关闭的话下载完成之后本地操作该文件会提示被占用),2)增加了连续下载多个文件(位于Form2)。
1、支持上传多个文件 2、可以将上传的文件改名保存 3、支持Request方法,来代替Asp的Request获得附加信息,以便更好的利用Asp编程 4、能够在服务器上创建指定路径 5、可以判断上传文件的大小、文件类型 6、支持...
4. 文件上传,可以一次按顺序上传多个超大文件。 5. 组件完全采用多线程方式上传,达到更高性能。 6. 支持进度事件信息及百分比显示。 7. 支持简洁高效的JAVASCRIPT编程接口。 8. 支持过滤文件大小,文件总数量,...
Liferay多文件上传与下载实例,前端包含多文件上传JS,可以动态追加文件,删除文件,还有文件类型与大小验证JS。后端可以批文件上传。 下载可以实现弹出页另存为。避免了Liferay自身下载PDF和图片时在当前页面打开的...
能够实现一次选择多个文件同时上传,并且支持大文件上传,可以限制文件的类型、大小、选择的数量等等,功能很强大,我也找了好久,希望对朋友们有用。
动态添加文本框,可以一次性上传多个文件,使用struts2拦截器对上传文件的类型进行过滤
说明: Wordpress插件,允许用户通过AJAX从Wordpress网站上的表单向Wordpress默认上传文件夹提交多个文件,并将附件添加到Wordpress媒体库。 包括用于在帖子编辑器中创建的表单中使用的简码[wp-multi-file-uploader]...
>双击文件组可以快速打开多个文件 16、在多个目录中查找/替换 >支持多行的查找/替换 17、排序 >按升序/降序排序 >按文本或数字排序 >按一列数据排序 >按正则表达式排序 18、查找/删除重复...
一次可选多个文件,操作快捷,代码解析详细。 jquery+flash插件,实现文件多选上传。 附件类型,大小,数量可控。 保存附件名称供进一步操作(如:保存附件名称至数据库)。
资源绝对可以用,经本人测试。。 原理:一次可以全选N个文件,然后将文件放入队列中,依次单个文件上传。可以设定上传文件大小类型,只需要更改路径就可以了
而且我们升级了用户体验,用户现在不仅能够通过点击按钮来选择多个文件,还可以通过HttpDroper来拖拽文件甚至是文件夹。 现在我们能够轻松支持2G左右的大文件上传。为了减轻服务器的压力在HttpUploader模块中我们并...