android上传文件到服务器

重点:最好是设置好content-type这些参数的配置! 复制代码 packagecom.spring.sky.image.upload.network;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.net.HttpURLConnection;
importjava.net.MalformedURLException;
importjava.net.URL;
importjava.util.UUID;
importandroid.util.Log;

/**
*
*上传工具类
*
@author dujinyang
*QQ:1875125470
*/
public classUploadUtil{
private static finalStringTAG="uploadFile";
private static final intTIME_OUT=10*1000; // 超时时间
private static finalStringCHARSET="utf-8"; // 设置编码
/**
*android上传文件到服务器
*
@param file需要上传的文件
*
@param RequestURL请求的rul
*
@return 返回响应的内容
*/
public staticStringuploadFile(Filefile,StringRequestURL)
{
Stringresult= null;
StringBOUNDARY=UUID.randomUUID().toString(); // 边界标识随机生成
StringPREFIX="--",LINE_END="\r\n";
StringCONTENT_TYPE="multipart/form-data"; // 内容类型

try{
URLurl= newURL(RequestURL);
HttpURLConnectionconn=(HttpURLConnection)url.openConnection();
conn.setReadTimeout(TIME_OUT);
conn.setConnectTimeout(TIME_OUT);
conn.setDoInput( true); // 允许输入流
conn.setDoOutput( true); // 允许输出流
conn.setUseCaches( false); // 不允许使用缓存
conn.setRequestMethod("POST"); // 请求方式
conn.setRequestProperty("Charset",CHARSET); // 设置编码
conn.setRequestProperty("connection","keep-alive");
conn.setRequestProperty("Content-Type",CONTENT_TYPE+";boundary="+BOUNDARY);

if(file!= null)
{
/**
*当文件不为空,把文件包装并且上传
*/
DataOutputStreamdos= newDataOutputStream(conn.getOutputStream());
StringBuffersb= newStringBuffer();
sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINE_END);
/**
*这里重点注意:
*name里面的值为服务器端需要key只有这个key才可以得到对应的文件
*filename是文件的名字,包含后缀名的比如:abcdefg.png
*/

sb.append("Content-Disposition:form-data;name=\"img\";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());
InputStreamis= newFileInputStream(file);
byte[]bytes= new byte[1024];
intlen=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=成功
*当响应成功,获取响应的流
*/
intres=conn.getResponseCode();
Log.e(TAG,"responsecode:"+res);
// if(res==200)
// {
Log.e(TAG,"requestsuccess");
InputStreaminput=conn.getInputStream();
StringBuffersb1= newStringBuffer();
intss;
while((ss=input.read())!=-1)
{
sb1.append(( char)ss);
}
result=sb1.toString();
Log.e(TAG,"result:"+result);
// }
// else{
// Log.e(TAG,"requesterror");
// }
}
} catch(MalformedURLExceptione){
e.printStackTrace();
} catch(IOExceptione){
e.printStackTrace();
}
returnresult;
}
} 复制代码

参数就一个File文件和一个请求上传的URL,

需要在XML文件上加入网络权限.




下面是Activity的代码:

复制代码 package com.spring.sky.image.upload;


import java.io.File;

import com.spring.sky.image.upload.network.UploadUtil;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
/**
*Activity上传的界面
*
@author dujinyang */
public class MainActivity extends Activity implements OnClickListener{
private static final StringTAG="uploadImage";
private static StringrequestURL="http://192.168.1.160:8080/DUJINYANG/imgUpload";
private ButtonselectImage,uploadImage;
private ImageViewimageView;

private StringpicPath= null ;

/** Calledwhentheactivityisfirstcreated. */
@Override
public void onCreate(BundlesavedInstanceState){
super .onCreate(savedInstanceState);
setContentView(R.layout.main);

selectImage=(Button) this .findViewById(R.id.selectImage);
uploadImage=(Button) this .findViewById(R.id.uploadImage);
selectImage.setOnClickListener( this );
uploadImage.setOnClickListener( this );

imageView=(ImageView) this .findViewById(R.id.imageView);


}

@Override
public void onClick(Viewv){
switch (v.getId()){
case R.id.selectImage:
/** *
*这个是调用android内置的intent,来过滤图片文件,同时也可以过滤其他的
*/
Intentintent= new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,1);
break ;
case R.id.uploadImage:
Filefile= new File(picPath);
if (file!= null )
{
Stringrequest=UploadUtil.uploadFile(file,requestURL);
uploadImage.setText(request);
}
break ;
default :
break ;
}
}

@Override
protected void onActivityResult( int requestCode, int resultCode,Intentdata){
if (resultCode==Activity.RESULT_OK)
{
/**
*当选择的图片不为空的话,在获取到图片的途径
*/
Uriuri=data.getData();
Log.e(TAG,"uri="+uri);
try {
String[]pojo={MediaStore.Images.Media.DATA};

Cursorcursor=managedQuery(uri,pojo, null , null , null );
if (cursor!= null )
{
ContentResolvercr= this .getContentResolver();
int colunm_index=cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
Stringpath=cursor.getString(colunm_index);
/** *
*这里加这样一个判断主要是为了第三方的软件选择,比如:使用第三方的文件管理器的话,你选择的文件就不一定是图片了,这样的话,我们判断文件的后缀名
*如果是图片格式的话,那么才显示
*/
if (path.endsWith("jpg")||path.endsWith("png"))
{
picPath=path;
Bitmapbitmap=BitmapFactory.decodeStream(cr.openInputStream(uri));
imageView.setImageBitmap(bitmap);
} else {alert();}
} else {alert();}

} catch (Exceptione){
}
}

super .onActivityResult(requestCode,resultCode,data);
}

private void alert()
{
Dialogdialog= new AlertDialog.Builder( this )
.setTitle("提示")
.setMessage("您选择的不是有效的图片")
.setPositiveButton("确定",
new DialogInterface.OnClickListener(){
public void onClick(DialogInterfacedialog,
int which){
picPath= null ;
}
})
.create();
dialog.show();
}

} 复制代码

layout代码:
复制代码 <? xmlversion="1.0"encoding="utf-8" ?>
< LinearLayout xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
< Button
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:text
="选择图片D"
android:id
="@+id/selectImage"
/>
< Button
android:layout_width ="fill_parent"
android:layout_height
="wrap_content"
android:text
="上传图片D"
android:id
="@+id/uploadImage"
/>
< ImageView
android:layout_width ="wrap_content"
android:layout_height
="wrap_content"
android:id
="@+id/imageView"
/>
</ LinearLayout > 复制代码 提示:如果想上传其他文件的话,可以修改过滤条件就可以了, 同时文件的类型一定要和服务器端的文件类型保持一致,否则上传就失败了! url:http://blog.csdn.net/djy1992/article/details/10188219

更多相关文章

  1. 介绍一下android的各种权限。 代码如下: Html代码 <manifestxmlns
  2. android aosp 下载源代码
  3. Android中使用XmlPullParse解析xml文件
  4. 如何将library项目打包成jar文件
  5. How to decompile .dex file on Android如何反编译.dex文件
  6. 《android开发应用实战详解》光盘源代码
  7. Android 源码编译 文件系统制作
  8. manifest文件
  9. android不是内部或外部命令,也不是可运行的程序或批处理文件

随机推荐

  1. Android获取设备型号和系统版本号、mac地
  2. 【百度地图-安卓SDK】技术详解集锦
  3. relativelayout常用属性
  4. 安卓的下拉控件Spinner
  5. [转]android:利用DatabaseUtils.InsertHel
  6. Android(安卓)中文 API (21) —— DigitalC
  7. #Android学习笔记(二)#
  8. android安装和卸载程序
  9. Android(安卓)AIDL例子
  10. eclipse的android智能提示设置