java.lang.NoClassDefFoundError代碼部分來自網路,這裡引用的是apache給的開源jar包,實現很方便的,(commons-httpclient-3.1android用戶端使用),(commons-fileupload-1.2.2,commons-io-2.4,servlet的使用,記得把後面兩個jar包放在 C:\Program Files\Java\jdk1.7.0_09\jre\lib\ext目錄下)
下面貼貼代碼吧:
httpclict如下:
package com.example.http ;import java.io.File ;import org.apache.commons.httpclient.HttpClient ;import org.apache.commons.httpclient.HttpStatus ;import org.apache.commons.httpclient.methods.PostMethod ;import org.apache.commons.httpclient.methods.multipart.FilePart ;import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity ;import org.apache.commons.httpclient.methods.multipart.Part ;public class Hclient{/* * private Context mContext ; * * public Hclient ( Context c ) { this.mContext = c ; } */public void UpLoadFile ( String str){String targetURL = null ;// TODO 指定URLFile targetFile = null ;// TODO 指定上傳檔案targetFile = new File ( str) ;targetURL = "http://192.168.1.100:8081/http/Http" ; // servleturlPostMethod filePost = new PostMethod ( targetURL ) ;try{// 通過以下方法可以類比頁面參數提交// filePost.setParameter("name", "中文");// filePost.setParameter("pass", "1234");Part [ ] parts ={ new FilePart ( targetFile.getName ( ) , targetFile ) } ;filePost.setRequestEntity ( new MultipartRequestEntity ( parts , filePost.getParams ( ) ) ) ;HttpClient client = new HttpClient ( ) ;client.getHttpConnectionManager ( ).getParams ( ) .setConnectionTimeout ( 5000 ) ;int status = client.executeMethod ( filePost ) ;if ( status == HttpStatus.SC_OK ){System.out.println ( "上傳成功" ) ;// 上傳成功}else{System.out.println ( "上傳失敗" ) ;// 上傳失敗}}catch ( Exception ex ){ex.printStackTrace ( ) ;}finally{filePost.releaseConnection ( ) ;}}}
Activity如下:
package com.example.http ;import android.app.Activity ;import android.os.Bundle ;import android.os.StrictMode ;import android.view.View ;import android.widget.Button ;public class HttpMainActivity extends Activity{private ButtonmButton ;private Stringstr1= "/sdcard/http.txt" ;private Stringstr2= "/sdcard/http.mp3" ;private intmFlag= 0 ;Hclienthclient ;@ 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_main ) ;mButton = ( Button ) findViewById ( R.id.button ) ;hclient = new Hclient ( ) ;mButton.setOnClickListener ( new View.OnClickListener ( ){@ Overridepublic void onClick( View v ){mFlag ++ ;if ( mFlag == 1 ){hclient.UpLoadFile ( str1 ) ;}elseif ( mFlag == 2 ){hclient.UpLoadFile ( str2 ) ;}else{}}} ) ;}}
記得加許可權:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET"/>
t添加jar包的時候可能編譯不過,java.lang.NoClassDefFoundError錯誤,下面給出辦法:
1,添加jar包
2,把jar包放在libs檔案中,
下面是servlet代碼:
import java.io.File ;import java.io.IOException ;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.disk.DiskFileItemFactory ;import org.apache.commons.fileupload.servlet.ServletFileUpload ;public class TestServlets extends HttpServlet{private StringuploadPath= "D:\\temp" ;// 上傳檔案的目錄private StringtempPath= "d:\\temp\\buffer\\" ;// 臨時檔案目錄private FiletempPathFile ;public void init( ) throws ServletException{File uploadFile = new File ( uploadPath ) ;if ( ! uploadFile.exists ( ) ){uploadFile.mkdirs ( ) ;}File tempPathFile = new File ( tempPath ) ;if ( ! tempPathFile.exists ( ) ){tempPathFile.mkdirs ( ) ;}}public void doPost( HttpServletRequest request ,HttpServletResponse response ) throws ServletException ,IOException{try{// Create a factory for disk-based file itemsDiskFileItemFactory factory = new DiskFileItemFactory ( ) ;// Set factory constraintsfactory.setSizeThreshold ( 4096 ) ; // 設定緩衝區大小,這裡是4kbfactory.setRepository ( tempPathFile ) ;// 設定緩衝區目錄// Create a new file upload handlerServletFileUpload upload = new ServletFileUpload (factory ) ;// Set overall request size constraintupload.setSizeMax ( 4194304 ) ; // 設定最大檔案尺寸,這裡是4MBList < FileItem > items = upload.parseRequest ( request ) ;// 得到所有的檔案Iterator < FileItem > i = items.iterator ( ) ;while ( i.hasNext ( ) ){FileItem fi = ( FileItem ) i.next ( ) ;String fileName = fi.getName ( ) ;if ( fileName != null ){File fullFile = new File (fi.getName ( ) ) ;File savedFile = new File ( uploadPath ,fullFile.getName ( ) ) ;fi.write ( savedFile ) ;}}System.out.print ( "upload succeed" ) ;}catch ( Exception e ){System.out.println ( e.getMessage ( ) ) ;// 可以跳轉出錯頁面e.printStackTrace ( ) ;}}}
點擊開啟連結,點擊這個是jar包的,我已經上傳csdn了