android多文件上传
‘壹’ Android上大文件分片上传 具体怎么弄
正常情况下,一般都是在长传完成后,在服务器直接保存。
?
1
2
3
4
5
6
7
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//保存文件
context.Request.Files[0].SaveAs(context.Server.MapPath("~/1/" + context.Request.Files[0].FileName));
context.Response.Write("Hello World");
}
最近项目中用网络开源的上传组件webuploader,官方介绍webuploader支持分片上传。具体webuploader的使用方法见官网http://fex..com/webuploader/。
?
1
2
3
4
5
6
7
8
9
10
11
12
var uploader = WebUploader.create({
auto: true,
swf:'/webuploader/Uploader.swf',
// 文件接收服务端。
server: '/Uploader.ashx',
// 内部根据当前运行是创建,可能是input元素,也可能是flash.
pick: '#filePicker',
chunked: true,//开启分片上传
threads: 1,//上传并发数
//由于Http的无状态特征,在往服务器发送数据过程传递一个进入当前页面是生成的GUID作为标示
formData: {guid:"<%=Guid.NewGuid().ToString()%>"}
});
webuploader的分片上传是把文件分成若干份,然后向你定义的文件接收端post数据,如果上传的文件大于分片的尺寸,就会进行分片,然后会在post的数据中添加两个form元素chunk和chunks,前者标示当前分片在上传分片中的顺序(从0开始),后者代表总分片数。
‘贰’ 天翼云盘Android客户端如何上传文件
通过Android客户端上传文件:1)登录客户端后在云盘右上角点击+菜单按钮;2)在文件选择界面中可选择不同的类型文件上传,完成后,点击“上传”按钮,文件即进入传输列表进行上传。客服75为你解答。宽带服务可自助排障,简单易操作,另外可办理工单查询、ITV修障、宽带申请及密码服务,方便快捷,更多功能敬请关注中国电信贵州客服。
‘叁’ 手机是安卓Android手机,天翼云存储上传文件怎么操作
天翼云存储上传文件具体操作如下:1、通过网页版上传文件:1)登录天翼云存储,在页面上方点击“上传文件”按钮;2)在弹出的对话框选择“添加文件”按钮;3)在弹出文件框选择文件,点击“打开”按钮即可上传。2、通过PC客户端上传文件:登录PC客户端,把需要上传的文件直接拖动到PC客户端即可进行上传。3、通过Android客户端上传文件:1)登录Android客户端,在主界面下方点击“上传”按钮,2)在SD卡中选择文件,点击“确定”按钮,文件即进入传输列表进行上传。4、通过iPhone或iPad客户端上传文件跟Android客户端方法基本一致,但iPhone、iPad没有SD卡,需在“照片”或“视频”中选择文件上传。“天翼云存储”是为有天翼云存储需求的天翼帐号用户提供的安全、高速、大容量的在线存储管理、备份及共享的服务,支持多终端的个人数据中心,包括了媒体自动筛选、文件在线浏览及播放、云转码浏览及播放、通讯录安全备份、同步备份二合一等功能。无固定有效期,业务提供方中国电信有终止本业务的权利。适用于有天翼云存储需求的天翼帐号用户。贵州地区用户关注中国电信贵州客服公众号可微信缴费,一键查话费充值,流量、积分、账单、详单均可自助操作,方便快捷。客服233为你解答。
‘肆’ 云存储——通过Android客户端如何上传文件
(1)登录Android客户端,在主界面下方点击“上传”按钮,(2)在SD卡中选择文件,点击“确定”按钮,文件即进入传输列表进行上传。了解更多服务优惠点击下方的“官方网址”客服221为你解答。
‘伍’ 安卓手机如何将文件传送到另一个手机
手机文件怎么传到电脑?现在很多事情我们都能通过手机完成,因此上面也保存了很多重要的数据,如通讯录联系人、照片、微信聊天记录等等,那这些数据怎么传到电脑上呢?今天就针对这个问题,给大家分享几招,希望能够帮助到你哟!
方法一:使用iCloud备份数据
打开苹果手机上的设置,然后输入自己的Apple ID进入“iCloud”,接着下滑找到“iCloud云备份”并将其按钮开启,这样当设备接入电源、锁定且接入Wi-Fi时,将自动备份设备中的照片图库、账户信息、文稿等数据。
友情提示:每个iCloud账号只有5GB的免费存储空间,超出需要每个月支付少量费用才能继续备份哟。
方法二:用电脑端iTunes备份数据
这个方法也是比较简单的,在个人电脑上操作,没有存储空间的限制,具体操作如下:
打开个人电脑,并运行iTuens软件,然后利用数据线将iPhone连接至电脑,待iTunes识别我们的iPhone型号后,点击右上角的小手机图标进入“摘要”,接着点击右下角的“立即备份”按钮,等待进度条完成100%即可成功备份。
其实除了以上的备份方式,我们还可以借助“果备份”这款专业的苹果数据备份软件,相比于以上的两招,这个方法更为简单,且能在线预览和导出备份好的数据,可视化操作,让备份更简单。
我们只需在果备份官网下载软件,运行后用数据线将手机连接至电脑,待软件识别出我们的设备后,点击“开始备份”即可等待整机备份。
备份完成后,我们可以选择需要的数据项进行查看或导出,在这里小编以微信聊天记录为例,在数据项列表中点击“微信聊天记录”进入备份详情页,勾选需要的部分,在右下角选择需要的格式即可将微信聊天记录导出。
苹果手机备份?生活中我们难免会遇到数据丢失的情况,因此定期备份才是有效保护数据的做法,小伙伴们还在等什么呢?抓紧试试看吧!
‘陆’ Android图片批量上传的功能。(图片比较大)
Android中上传图片或者下载图片,使用最多的是xUtils和imageloader、glide,选用这两种的哪一种框架都行,因为是批量和图片大容易造成界面卡以及上传速度慢,对图片操作不当就容易造成OOM异常,一般对于批量上传大图片都需要对图片也处理,然后在上传第一步需要对图片进行比例压缩之后再进行质量压缩,处理之后的图片比之前的图片会小很多,再加上框架的上传处理,会有很好的效果,希望对你有所帮助
‘柒’ android如何实现图片批量上传
首先,以下架构下的批量文件上传可能会失败或者不会成功:
1.android客户端+springMVC服务端:服务端采用org.springframework.web.multipart.MultipartHttpServletRequest作为批量上传接收类,这种搭配下的批量文件上传会失败,最终服务端只会接受到一个文件,即只会接受到第一个文件。可能因为MultipartHttpServletRequest对servlet原本的HttpServletRequest类进行封装,导致批量上传有问题。
2.android客户端+strutsMVC服务端:
上传成功的方案:
采用android客户端+Servlet(HttpServletRequest)进行文件上传。
Servlet端代码如下:
[java] view plainprint?
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try
{
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext())
{
FileItem item = (FileItem) itr.next();
if (item.isFormField())
{
System.out.println("表单参数名:" + item.getFieldName() + ",表单参数值:" + item.getString("UTF-8"));
}
else
{
if (item.getName() != null && !item.getName().equals(""))
{
System.out.println("上传文件的大小:" + item.getSize());
System.out.println("上传文件的类型:" + item.getContentType());
// item.getName()返回上传文件在客户端的完整路径名称
System.out.println("上传文件的名称:" + item.getName());
File tempFile = new File(item.getName());
// 上传文件的保存路径
File file = new File(sc.getRealPath("/") + savePath, tempFile.getName());
item.write(file);
request.setAttribute("upload.message", "上传文件成功!");
} else
{
request.setAttribute("upload.message", "没有选择上传文件!");
}
}
}
}
catch (FileUploadException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
request.setAttribute("upload.message", "上传文件失败!");
}
request.getRequestDispatcher("/uploadResult.jsp").forward(request, response);
android端代码如下:
[java] view plainprint?
public class SocketHttpRequester {
/**
*多文件上传
* 直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:
* <FORM METHOD=POST ACTION="http://192.168.1.101:8083/upload/servlet/UploadServlet" enctype="multipart/form-data">
<INPUT TYPE="text" NAME="name">
<INPUT TYPE="text" NAME="id">
<input type="file" name="imagefile"/>
<input type="file" name="zip"/>
</FORM>
* @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.iteye.cn或http://192.168.1.101:8083这样的路径测试)
* @param params 请求参数 key为参数名,value为参数值
* @param file 上传文件
*/
public static boolean post(String path, Map<String, String> params, FormFile[] files) throws Exception{
final String BOUNDARY = "---------------------------7da2137580612"; //数据分隔线
final String endline = "--" + BOUNDARY + "--\r\n";//数据结束标志
int fileDataLength = 0;
for(FormFile uploadFile : files){//得到文件类型数据的总长度
StringBuilder fileExplain = new StringBuilder();
fileExplain.append("--");
fileExplain.append(BOUNDARY);
fileExplain.append("\r\n");
fileExplain.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
fileExplain.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
fileExplain.append("\r\n");
fileDataLength += fileExplain.length();
if(uploadFile.getInStream()!=null){
fileDataLength += uploadFile.getFile().length();
}else{
fileDataLength += uploadFile.getData().length;
}
}
StringBuilder textEntity = new StringBuilder();
for (Map.Entry<String, String> entry : params.entrySet()) {//构造文本类型参数的实体数据
textEntity.append("--");
textEntity.append(BOUNDARY);
textEntity.append("\r\n");
textEntity.append("Content-Disposition: form-data; name=\""+ entry.getKey() + "\"\r\n\r\n");
textEntity.append(entry.getValue());
textEntity.append("\r\n");
}
//计算传输给服务器的实体数据总长度
int dataLength = textEntity.toString().getBytes().length + fileDataLength + endline.getBytes().length;
URL url = new URL(path);
int port = url.getPort()==-1 ? 80 : url.getPort();
Socket socket = new Socket(InetAddress.getByName(url.getHost()), port);
OutputStream outStream = socket.getOutputStream();
//下面完成HTTP请求头的发送
String requestmethod = "POST "+ url.getPath()+" HTTP/1.1\r\n";
outStream.write(requestmethod.getBytes());
String accept = "Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
outStream.write(accept.getBytes());
String language = "Accept-Language: zh-CN\r\n";
outStream.write(language.getBytes());
String contenttype = "Content-Type: multipart/form-data; boundary="+ BOUNDARY+ "\r\n";
outStream.write(contenttype.getBytes());
String contentlength = "Content-Length: "+ dataLength + "\r\n";
outStream.write(contentlength.getBytes());
String alive = "Connection: Keep-Alive\r\n";
outStream.write(alive.getBytes());
String host = "Host: "+ url.getHost() +":"+ port +"\r\n";
outStream.write(host.getBytes());
//写完HTTP请求头后根据HTTP协议再写一个回车换行
outStream.write("\r\n".getBytes());
//把所有文本类型的实体数据发送出来
outStream.write(textEntity.toString().getBytes());
//把所有文件类型的实体数据发送出来
for(FormFile uploadFile : files){
StringBuilder fileEntity = new StringBuilder();
fileEntity.append("--");
fileEntity.append(BOUNDARY);
fileEntity.append("\r\n");
fileEntity.append("Content-Disposition: form-data;name=\""+ uploadFile.getParameterName()+"\";filename=\""+ uploadFile.getFilname() + "\"\r\n");
fileEntity.append("Content-Type: "+ uploadFile.getContentType()+"\r\n\r\n");
outStream.write(fileEntity.toString().getBytes());
if(uploadFile.getInStream()!=null){
byte[] buffer = new byte[1024];
int len = 0;
while((len = uploadFile.getInStream().read(buffer, 0, 1024))!=-1){
outStream.write(buffer, 0, len);
}
uploadFile.getInStream().close();
}else{
outStream.write(uploadFile.getData(), 0, uploadFile.getData().length);
}
outStream.write("\r\n".getBytes());
}
//下面发送数据结束标志,表示数据已经结束
outStream.write(endline.getBytes());
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
if(reader.readLine().indexOf("200")==-1){//读取web服务器返回的数据,判断请求码是否为200,如果不是200,代表请求失败
return false;
}
outStream.flush();
outStream.close();
reader.close();
socket.close();
return true;
}
/**
*单文件上传
* 提交数据到服务器
* @param path 上传路径(注:避免使用localhost或127.0.0.1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.itcast.cn或http://192.168.1.10:8080这样的路径测试)
* @param params 请求参数 key为参数名,value为参数值
* @param file 上传文件
*/
public static boolean post(String path, Map<String, String> params, FormFile file) throws Exception{
return post(path, params, new FormFile[]{file});
}
}
‘捌’ 安卓HTML5,多文件上传不支持么
Android web对于input-file的支持不太好,,到了android 4.4是连选择文件的窗口都打不开了,我以前有试过,这个如果你是app里面嵌入webview,建议上传文件这一环节交给原生去做,原生上传好文件给到web文件信息。
如果是纯webapp的话,微信可以用公众平台提供的js api,里面有上传图片的接口.其它的web网页就没什么好的方式了。
‘玖’ Android上大文件传输到服务器,最大能传输多大的文件
Android 上传时, 虽然他的定义是long型的, 但是字节长度还是会受到 Integer.Max的影响,所以上传是多只能传 2.1G 的文件.
‘拾’ android实现文件上传的功能
我是这样做的
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "请选择一个要上传的文件"), 1);
然后选择文件后调用
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String url= uri.toString();
}
}
获得路径,根据路径调用
public String convertCodeAndGetText(String str_filepath) {// 转码\
try {
File file1 = new File(str_filepath);
file_name = file1.getName();
FileInputStream in = new FileInputStream(file1);
byte[] buffer = new byte[(int) file1.length() + 100];
int length = in.read(buffer);
load = Base64.encodeToString(buffer, 0, length,
Base64.DEFAULT);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return load;
}
对文件进行编码