`

Android二进制文件转码到Base64并通过Post进行提交

阅读更多

类似于Ruby,在上面调试成功后,将功能迁移到了Android应用上面。

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;

import android.util.Base64;
import android.util.Log;

	/**
	 * TODO FIX Check the file length, it's long not int.This may lead the
	 * problem.
	 * 
	 * @param fileName
	 * @param url
	 * @return
	 */
	public static boolean httpPostBase64(String fileName, String url) {
		try {
			File file = new File(fileName);
			FileInputStream in = new FileInputStream(file);
			byte[] buffer = new byte[(int) file.length() + 100];
			int length = in.read(buffer);
			String data = Base64.encodeToString(buffer, 0, length,
					Base64.DEFAULT);

			HttpPost httpRequest = new HttpPost(url);
			/*
			 * NameValuePair实现请求参数的封装
			 */
			List<NameValuePair> params = new LinkedList<NameValuePair>();
			params.add(new BasicNameValuePair("data", data));

			/* 添加请求参数到请求对象 */
			httpRequest.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
			/* 发送请求并等待响应 */
			HttpResponse httpResponse = new DefaultHttpClient()
					.execute(httpRequest);
			/* 若状态码为200 ok */
			if (httpResponse.getStatusLine().getStatusCode() != 200) {
				Log.d("Code", httpResponse.getStatusLine().toString());
				return false;
			}

		} catch (Exception e) {
			for(StackTraceElement s:e.getStackTrace())
				Log.d("Exception",s.toString());
			Log.d("Exception",e.getLocalizedMessage());
			
			return false;
		}

		return true;
	}
 
分享到:
评论
7 楼 qianjigui 2011-02-22  
LuoYer 写道
还有一点,就是向下不兼容,用google提供的base64类,在1.0和2.2中间的版本,都被去掉不支持的。

老兄绝对是个高手啊,这么丰富的经验。谢谢提醒了。
6 楼 LuoYer 2011-02-22  
还有一点,就是向下不兼容,用google提供的base64类,在1.0和2.2中间的版本,都被去掉不支持的。
5 楼 qianjigui 2011-02-19  
毕竟红尘 写道
   
  FileInputStream in = new FileInputStream(file);  
            byte[] buffer = new byte[(int) file.length() + 100];  
            int length = in.read(buffer);  
            String data = Base64.encodeToString(buffer, 0, length,  
            Base64.DEFAULT);  


你这个搞不定大文件,特别是在手机上,比如上M的。
基本思路是:大文件应该将文件base64编码到磁盘上,然后再通过http流来搞。

非常感谢你的提醒,大文件确实没有考虑到。
4 楼 qianjigui 2011-02-19  
aa87963014 写道
...完全看不出有什么作用 上传就上传 还非要变成String 提交..

这个也算是情况特殊,我这边的数据保存后端是Google Form。
3 楼 aa87963014 2011-02-18  
...完全看不出有什么作用 上传就上传 还非要变成String 提交..
2 楼 syluke 2011-02-18  
毕竟红尘 写道
   
  FileInputStream in = new FileInputStream(file);  
            byte[] buffer = new byte[(int) file.length() + 100];  
            int length = in.read(buffer);  
            String data = Base64.encodeToString(buffer, 0, length,  
            Base64.DEFAULT);  


你这个搞不定大文件,特别是在手机上,比如上M的。
基本思路是:大文件应该将文件base64编码到磁盘上,然后再通过http流来搞。

有道理。
1 楼 毕竟红尘 2011-02-18  
   
  FileInputStream in = new FileInputStream(file);  
            byte[] buffer = new byte[(int) file.length() + 100];  
            int length = in.read(buffer);  
            String data = Base64.encodeToString(buffer, 0, length,  
            Base64.DEFAULT);  


你这个搞不定大文件,特别是在手机上,比如上M的。
基本思路是:大文件应该将文件base64编码到磁盘上,然后再通过http流来搞。

相关推荐

    jquery.base64

    在现代Web开发中,数据的传输和存储往往需要进行编码处理,其中Base64编码是一种常见的二进制到文本的转换方式,用于在网络上传输非ASCII字符。jQuery.base64是一个jQuery插件,专门用于在JavaScript环境中进行Base...

    base64 转码

    例如,在使用`URLSession`进行POST请求时,可以将图片转换为Base64字符串,并作为JSON对象的一部分发送。 四、Base64与安全 尽管Base64编码可以使得数据在传输过程中更易读,但它并不提供任何加密功能。因此,如果...

    图片上传到java后台

    通常,前端(如JavaScript)会将Base64编码后的图片字符串封装到JSON对象中,然后通过POST请求发送到后台。例如,创建一个包含"image"字段的JSON对象,其值为Base64字符串。在Java后台,可以使用如Jackson或Gson...

    Python3内置模块之base64编解码方法详解

    Base64是一种常见的二进制数据编码方案,主要用于在网络上传输8位字节码。它通过使用64个可打印字符(包括大写字母A-Z、小写字母a-z、数字0-9以及+和/符号)来表示二进制数据。Base64编码常用于电子邮件、URL、...

    人脸识别依赖的常用java类以及依赖jar包.rar

    1. **Base64Util.java**:Base64是一种在网络上传输二进制数据时常用的编码方式,将图片或其他二进制文件转换为ASCII字符串。Base64Util类提供了对Base64编码和解码的方法,这对于将面部图像数据在网络上传输或存储...

    字符串文件http密码资源文件openoffice图片等工具等

    ByteFileUtil提供文件按照二进制读写 FileUtil提供获取文件后缀名、修改文件的后缀名、删除文件或目录、根据流判断流的编码格式、获取文件的编码格式、创建文件、获得文件大小、创建文件目录 方法 OpenOfficeUtil...

    一个简单实用的开发工具

    3. **在线图片Base64转码**:Base64是一种将二进制数据编码为ASCII字符串的方法,常用于在HTTP协议中传输非ASCII字符。在线图片Base64转码工具可以将图片文件转换为Base64字符串,这样就可以直接在HTML中内嵌图片,...

    pop3接收邮件及解码

    Base64用于将二进制数据转化为ASCII文本,Quoted-printable则用于编码非打印字符,MIME(Multipurpose Internet Mail Extensions)则是一种扩展标准,它定义了多种编码方式,并规定了如何处理不同类型的附件。...

    php实现粘贴截图并完成上传功能

    这里的`str_replace`函数用于移除Base64字符串的前缀,`base64_decode`函数将剩余部分解码为二进制数据,然后`file_put_contents`将这些数据写入名为`$name`的文件中。文件名通过`md5(time())`生成,确保每个文件名...

    BB1407openwrt-RG100A_DB120-squashfs-cfe.bin

    2、为了提高性能,Perl版的同步信息数据采用的是二进制存储,不兼容bash版的数据,但我提供了一个转换的命令,设置好配置文件后运行如下命令: syncy.pl convert 运行以上命令后就转换至新的数据格式,但是即使...

Global site tag (gtag.js) - Google Analytics