android上传大文件到服务器客户端和服务器端代码

本文介绍如何利用xUtils框架解决Android上传大文件到服务器的问题,避免传统方法上传超过2MB文件时遇到的中断和错误。首先,需要获取xUtils的jar包,然后在Android客户端代码中添加权限并实现带进度条的上传对话框。同时,展示了从相册选择图片并显示在imageView上的代码片段。
摘要由CSDN通过智能技术生成

使用一般的上传方法一般上传不能超过2m的文件,也非常容易中断和出错,于是本人打算使用xutils框架进行文件上传开发,话不多说直接上源码

首先要下载这个类库的jar包,地址:https://github.com/wyouflf/xUtils

android端代码:

添加权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />


package com.example.download_test;

import java.io.File;

import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class UploadActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_upload);
		
		new Thread(){
			public void run() {
				System.out.println("上传线程启动");
				RequestParams params = new RequestParams();
				params.addHeader("head", "1");
				params.addQueryStringParameter("head", "2");

				// 只包含字符串参数时默认使用BodyParamsEntity,
				// 类似于UrlEncodedFormEntity("application/x-www-form-urlencoded")。
				params.addBodyParameter("222", "22");//相当于与文件同时发给服务器的字符串对象,在servlet中可以通过遍历FileItem的list得到

				// 加入文件参数后默认使用MultipartEntity("multipart/form-data"),
				// 如需"multipart/related",xUtils中提供的MultipartEntity支持设置subType为"related"。
				// 使用params.setBodyEntity(httpEntity)可设置更多类型的HttpEntity(如:
				// MultipartEntity,BodyParamsEntity,FileUploadEntity,InputStreamUploadEntity,StringEntity)。
				// 例如发送json参数:params.setBodyEntity(new StringEntity(jsonStr,charset));
				params.addBodyParameter("file", new File("/storage/emulated/0/Trinea/MeiLiShuo-7.apk"));//设置要上传文件的本地路径,<span style="font-family: Arial, Helvetica, sans-serif;">第一个参数就是html中<input>标签中的name属性,是与服务器传输文件字节流以外的文本信息的重要渠道,在servlet中这样获得fileitem.getFieldName();</span>

				HttpUtils http = new HttpUtils();
				http.send(HttpRequest.HttpMethod.POST,
				    "http://192.168.1.112:8080/auto_serve/servlet/UploadImage",//设置要上传到的url
				    params,
				    new RequestCallBack<String>() {

						@Override
						public void onCancelled() {
							// TODO Auto-generated method stub
							super.onCancelled();
							System.out.println("上传终止");
						}

						@Override
						/**
						 * 获取上传进度的方法
						 */
						public void onLoading(long total, long current,//这个方法大约一秒会执行一次
								boolean isUploading) {
							// TODO Auto-generated method stub
							
							System.out.println("目前上传大小"+current+"总大小"+total);
							super.onLoading(total, current
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值