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

来源:互联网 发布:温州网络学堂打不开 编辑:程序博客网 时间:2024/04/28 21:52

在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{@ Overrideprotected 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 ( ){@ Overridepublic 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文件


原创粉丝点击