android 上传文件android 上传文件
/* 上传文件至Server,uploadUrl:接收文件的处理页面 */
public String uploadFile(Bitmap src, String uploadUrl, String filename) {
String end = "\r\n";
String twoHyphens = "--";
String boundary = "******";
try {
URL url = new URL(uploadUrl);
HttpURLConnection http...
android 上传文件
/* 上传文件至Server,uploadUrl:接收文件的处理页面 */
public String uploadFile(Bitmap src, String uploadUrl, String filename) {
String end = "\r\n";
String twoHyphens = "--";
String boundary = "******";
try {
URL url = new URL(uploadUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
// 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃
// 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求
正文的流。
httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K
// 允许输入输出流
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
// 使用POST方法
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Charset", "UTF-8");
httpURLConnection.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(
httpURLConnection.getOutputStream());
dos.writeBytes(twoHyphens + boundary + end);
dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";
filename=\""
+ filename + "\"" + end);
dos.writeBytes(end);
// 将要上传的内容写入流中
InputStream srcis = Function.Bitmap2IS(src);
byte[] buffer = new byte[8192]; // 8k
int count = 0;
// 读取文件
while ((count = srcis.read(buffer)) != -1) {
dos.write(buffer, 0, count);
}
srcis.close();
dos.writeBytes(end);
dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
dos.flush();
InputStream is = httpURLConnection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
// 上传返回值
String sl;
String result="";
while((sl = br.readLine()) != null)
result = result+sl;
br.close();
is.close();
return result;
//dos.close();
} catch (Exception e) {
e.printStackTrace();
return "网络出错!";
}
}
这是网上的代码,原文地址不记得了,本身是为了解决我自己的一个需求将一个内存中的照片
上传,这里有一个问
需要记录一下,以免以后不知道
根据 RFC1867协议
这里参数的输入方法是
end 为换行\r\n
输入第一行 "Content-Disposition: form-data; name=\"test\""+ end 输入一行空格
输入参数内容
输入定义的分隔符(相当于上面的 twoHyphens + boundary + end)
对于接收端,只相当于普通的
单上传而以
改过的类
//例子
UpLoadFile uf=new UpLoadFile();
List
upParameters=new ArrayList();
UpParameter par=new UpParameter();
par.name="job_id";
par.data="123";
upParameters.add(par);
par=new UpParameter();
par.name="partner_id";
par.data="234";
upParameters.add(par);
par=new UpParameter();
par.name="start_pic";
par.type=ParType.File;
par.data=Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/IMG_2
0120508_171614.jpg";
upParameters.add(par);
par=new UpParameter();
par.name="sign_pic";
par.type=ParType.bytes;
par.data="000".getBytes();
upParameters.add(par);
String s=
uf.uploadFile( ";a=addJob",upParameters)
;
package com.test.uploadtest;
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader; import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection; import java.net.URL;
import java.util.List;
/**
* 上传文件
*
* @author Administrator
*
*/
public class UpLoadFile {
public static boolean isupok(String result)
{
return result.trim().equals("0");
}
/*----------------------------------从返回值中取出文字--------------------*/
public String getResultStr(InputStream is)
{
String result="";
InputStreamReader isr;
try {
isr = new InputStreamReader(is, "utf-8");
BufferedReader br = new BufferedReader(isr);
// 上传返回值
String sl;
while((sl = br.readLine()) != null)
result = result+sl;
br.close();
is.close();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
/*-----------------------------------------------------------------------*/
/* 上传文件至Server,uploadUrl:接收文件的处理页面 */
/*本次有两个文件需要上传,所以有点麻烦*/
public String uploadFile(String uploadUrl,ListupParameters) {
String end = "\r\n";
String twoHyphens = "--";
String boundary = "******";
String result="";
try {
URL url = new URL(uploadUrl);
HttpURLConnection httpURLConnection = (HttpURLConnection) url
.openConnection();
// 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃
// 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求
正文的流。
httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K
// 允许输入输出流
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
httpURLConnection.setUseCaches(false);
// 使用POST方法
httpURLConnection.setRequestMethod("POST");
httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
httpURLConnection.setRequestProperty("Charset", "UTF-8");
httpURLConnection.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(
httpURLConnection.getOutputStream());
dos.writeBytes(twoHyphens + boundary + end);
for(UpParameter par:upParameters)
{
par.writeTo(dos, twoHyphens + boundary + end, end);
}
dos.flush();
//从返回值中取出值
result=getResultStr(httpURLConnection.getInputStream());
} catch (Exception e) {
e.printStackTrace();
result="上传出错.."+e.getMessage();
}
return result;
}
public enum ParType{Str,File,bytes};
/***********上传参数类***********/
public static class UpParameter
{
public ParType type=ParType.Str;
public String name="par";
public Object data;
/**
* @param dos
* @param boundary 分隔符
* @param end 结束一般是\r\n
* @throws IOException
*/
public void writeTo(DataOutputStream dos,String boundary,String end) throws
IOException
{
switch(type)
{
case Str:
dos.writeBytes("Content-Disposition: form-data; name=\""+name+"\""+ end);
dos.writeBytes(end);
dos.writeBytes((String) data);
dos.writeBytes(end);
dos.writeBytes(boundary);
break;
case File:
String srcPath=(String) data;
dos.writeBytes("Content-Disposition: form-data; name=\""+name+"\"; filename=\""
+ srcPath.substring(srcPath.lastIndexOf("/") + 1)
+ "\""
+ end);
dos.writeBytes(end);
FileInputStream fis = new FileInputStream(srcPath);
byte[] buffer = new byte[8192]; // 8k
int count = 0;
// 读取文件
while ((count = fis.read(buffer)) != -1) {
dos.write(buffer, 0, count);
}
fis.close();
dos.writeBytes(end);
dos.writeBytes(boundary);
break;
case bytes:
dos.writeBytes("Content-Disposition: form-data; name=\""+name+"\""+ end);
dos.writeBytes(end);
dos.write((byte[]) data);
dos.writeBytes(end);
dos.writeBytes(boundary);
break;
}
}
}
}
本文档为【android 上传文件】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。