android通过HttpURLConnection上传文件袋servlet服务器

在servlet端还是用到了commons-fileupload.jar包

代码部分来自网络..............,供参考学习:,此方式类似于from表单的形式,可以参考这里(http://blog.csdn.net/skyer_lei/article/details/6106709

下面贴出代码部分:

ACTIVITY.java:

package com.example.httppost ;

import java.io.File ;
import java.util.HashMap ;
import java.util.Map ;

import android.os.Bundle ;
import android.os.StrictMode ;
import android.app.Activity ;
import android.view.Menu ;
import android.view.View ;
import android.view.View.OnClickListener ;
import android.widget.Button ;

public class HttpPostMainActivity extends Activity
	{

		@ Override
		protected void onCreate( Bundle savedInstanceState )
			{
				super.onCreate ( savedInstanceState ) ;
				StrictMode
						.setThreadPolicy ( new StrictMode.ThreadPolicy.Builder ( )
								.detectDiskReads ( ).detectDiskWrites ( )
								.detectNetwork ( ).penaltyLog ( ).build ( ) ) ;
				StrictMode.setVmPolicy ( new StrictMode.VmPolicy.Builder ( )
						.detectLeakedSqlLiteObjects ( )
						.detectLeakedClosableObjects ( ).penaltyLog ( )
						.penaltyDeath ( ).build ( ) ) ;
				setContentView ( R.layout.activity_http_post_main ) ;
				Button button = ( Button ) findViewById ( R.id.button ) ;
				button.setOnClickListener ( new OnClickListener ( )
					{

						@ Override
						public void onClick( View v )
							{
								String actionUrl = "http://192.168.1.100:8081/http/HttpPost" ;
								Map < String , String > params = new HashMap < String , String > ( ) ;
								params.put ( "strParamName" , "strParamValue" ) ;
								Map < String , File > files = new HashMap < String , File > ( ) ;
								files.put ( "tempAndroid.mp3" , new File (
										"/sdcard/http.mp3" ) ) ;
								try
									{
										String str = HttpPost.post ( actionUrl ,
												params , files ) ;
										System.out.println ( "str--->>>" + str ) ;
									}
								catch ( Exception e )
									{
									}
							}
					} ) ;
			}
	}

HttpPost:

package com.example.httppost ;

import java.io.DataOutputStream ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.IOException ;
import java.io.InputStream ;
import java.net.HttpURLConnection ;
import java.net.URL ;
import java.util.Map ;

public class HttpPost
	{
		/**
		 * 通过拼接的方式构造请求内容,实现参数传输以及文件传输
		 * @param acti.nUrl
		 * @param params
		 * @param files
		 * @return
		 * @throws IOException
		 */
		public static String post( String actionUrl ,
				Map < String , String > params , Map < String , File > files )
				throws IOException
			{

				String BOUNDARY = java.util.UUID.randomUUID ( ).toString ( ) ;
				String PREFIX = "--" , LINEND = "\r\n" ;
				String MULTIPART_FROM_DATA = "multipart/form-data" ;
				String CHARSET = "UTF-8" ;

				URL uri = new URL ( actionUrl ) ;
				HttpURLConnection conn = ( HttpURLConnection ) uri
						.openConnection ( ) ;
				conn.setReadTimeout ( 5 * 1000 ) ; // 缓存的最长时间
				conn.setDoInput ( true ) ;// 允许输入
				conn.setDoOutput ( true ) ;// 允许输出
				conn.setUseCaches ( false ) ; // 不允许使用缓存
				conn.setRequestMethod ( "POST" ) ;
				conn.setRequestProperty ( "connection" , "keep-alive" ) ;
				conn.setRequestProperty ( "Charsert" , "UTF-8" ) ;
				conn.setRequestProperty ( "Content-Type" , MULTIPART_FROM_DATA
						+ ";boundary=" + BOUNDARY ) ;

				// 首先组拼文本类型的参数
				StringBuilder sb = new StringBuilder ( ) ;
				for ( Map.Entry < String , String > entry : params.entrySet ( ) )
					{
						sb.append ( PREFIX ) ;
						sb.append ( BOUNDARY ) ;
						sb.append ( LINEND ) ;
						sb.append ( "Content-Disposition: form-data; name=\""
								+ entry.getKey ( ) + "\"" + LINEND ) ;
						sb.append ( "Content-Type: text/plain; charset="
								+ CHARSET + LINEND ) ;
						sb.append ( "Content-Transfer-Encoding: 8bit" + LINEND ) ;
						sb.append ( LINEND ) ;
						sb.append ( entry.getValue ( ) ) ;
						sb.append ( LINEND ) ;
					}

				DataOutputStream outStream = new DataOutputStream (
						conn.getOutputStream ( ) ) ;
				outStream.write ( sb.toString ( ).getBytes ( ) ) ;
				// 发送文件数据
				if ( files != null )
					for ( Map.Entry < String , File > file : files.entrySet ( ) )
						{
							StringBuilder sb1 = new StringBuilder ( ) ;
							sb1.append ( PREFIX ) ;
							sb1.append ( BOUNDARY ) ;
							sb1.append ( LINEND ) ;
							sb1.append ( "Content-Disposition: form-data; name=\"file\"; filename=\""
									+ file.getKey ( ) + "\"" + LINEND ) ;
							sb1.append ( "Content-Type: application/octet-stream; charset="
									+ CHARSET + LINEND ) ;
							sb1.append ( LINEND ) ;
							outStream.write ( sb1.toString ( ).getBytes ( ) ) ;

							InputStream is = new FileInputStream (
									file.getValue ( ) ) ;
							byte [ ] buffer = new byte [ 1024 ] ;
							int len = 0 ;
							while ( ( len = is.read ( buffer ) ) != - 1 )
								{
									outStream.write ( buffer , 0 , len ) ;
								}

							is.close ( ) ;
							outStream.write ( LINEND.getBytes ( ) ) ;
						}

				// 请求结束标志
				byte [ ] end_data = ( PREFIX + BOUNDARY + PREFIX + LINEND )
						.getBytes ( ) ;
				outStream.write ( end_data ) ;
				outStream.flush ( ) ;
				// 得到响应码
				int res = conn.getResponseCode ( ) ;
				InputStream in = conn.getInputStream ( ) ;
				if ( res == 200 )
					{
						int ch ;
						StringBuilder sb2 = new StringBuilder ( ) ;
						while ( ( ch = in.read ( ) ) != - 1 )
							{
								sb2.append ( ( char ) ch ) ;
							}
					}
				outStream.close ( ) ;
				conn.disconnect ( ) ;
				return in.toString ( ) ;
				
			}

	}

下面给出Serlvert的部分:(记得把上面的jar包放在Java\jdk1.7.0_09\jre\lib\ext下面,要不然可能编译不过哦)
import java.io.File ;
import java.io.IOException ;
import java.util.ArrayList ;
import java.util.Iterator ;
import java.util.List ;

import javax.servlet.ServletException ;
import javax.servlet.http.HttpServlet ;
import javax.servlet.http.HttpServletRequest ;
import javax.servlet.http.HttpServletResponse ;

import org.apache.commons.fileupload.FileItem ;
import org.apache.commons.fileupload.FileUpload ;
import org.apache.commons.fileupload.RequestContext ;
import org.apache.commons.fileupload.disk.DiskFileItemFactory ;
import org.apache.commons.fileupload.servlet.ServletFileUpload ;
import org.apache.commons.fileupload.servlet.ServletRequestContext ;

@ SuppressWarnings ( "serial" )
public class HttpPost extends HttpServlet
	{
		public void doPost( HttpServletRequest request ,
				HttpServletResponse response ) throws ServletException ,
				IOException
			{

				RequestContext req = new ServletRequestContext ( request ) ;
				if ( FileUpload.isMultipartContent ( req ) )
					{
						DiskFileItemFactory factory = new DiskFileItemFactory ( ) ;
						ServletFileUpload fileUpload = new ServletFileUpload (
								factory ) ;
						fileUpload.setFileSizeMax ( 1024 * 1024 * 1024 ) ;

						List items = new ArrayList ( ) ;
						try
							{
								items = fileUpload.parseRequest ( request ) ;
							}
						catch ( Exception e )
							{

							}

						Iterator it = items.iterator ( ) ;
						while ( it.hasNext ( ) )
							{
								FileItem fileItem = ( FileItem ) it.next ( ) ;
								if ( fileItem.isFormField ( ) )
									{
										System.out.println ( fileItem
												.getFieldName ( )
												+ " "
												+ fileItem.getName ( )
												+ " "
												+ new String ( fileItem
														.getString ( )
														.getBytes (
																"ISO-8859-1" ) ,
														"GBK" ) ) ;
									}
								else
									{
										System.out.println ( fileItem
												.getFieldName ( )
												+ " "
												+ fileItem.getName ( )
												+ " "
												+ fileItem.isInMemory ( )
												+ " "
												+ fileItem.getContentType ( )
												+ " " + fileItem.getSize ( ) ) ;
										if ( fileItem.getName ( ) != null
												&& fileItem.getSize ( ) != 0 )
											{
												File fullFile = new File (
														fileItem.getName ( ) ) ;
												File newFile = new File (
														"F:\\"
																+ fullFile
																		.getName ( ) ) ;
												try
													{
														fileItem.write ( newFile ) ;
													}
												catch ( Exception E )
													{

													}
											}
										else
											{
												System.out
														.println ( "no file choosen or empty file" ) ;
											}
									}
							}
					}
			}

		public void init( ) throws ServletException
			{
				// 读取在web.xml中配置的init-param
				// FILE_MAX_SIZE = Long.parseLong ( this
				// .getInitParameter ( "file_max_size" ) ) ;// 上传文件大小限制
				// FILE_SAVE_PATH = this.getInitParameter ( "file_save_path" )
				// ;// 文件保存位置
			}
	}


接的加权限哦............

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

下面给出Serlvet的配置:




class文件夹里面存放与web.xm文件里的servle-class文件


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值