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 指定URL
File targetFile = null ;// TODO 指定上傳文件
targetFile = new File ( str) ;
targetURL = "http://192.168.1.100:8081/http/Http" ; // servleturl
PostMethod 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 Button mButton ;
private String str1 = "/sdcard/http.txt" ;
private String str2 = "/sdcard/http.mp3" ;
private int mFlag = 0 ;
Hclient hclient ;
@ 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_main ) ;
mButton = ( Button ) findViewById ( R.id.button ) ;
hclient = new Hclient ( ) ;
mButton.setOnClickListener ( new View.OnClickListener ( )
{
@ Override
public void onClick( View v )
{
mFlag ++ ;
if ( mFlag == 1 )
{
hclient.UpLoadFile ( str1 ) ;
}
else
if ( 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 String uploadPath = "D:\\temp" ; // 上傳文件的目錄
private String tempPath = "d:\\temp\\buffer\\" ; // 臨時文件目錄
private File tempPathFile ;
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 items
DiskFileItemFactory factory = new DiskFileItemFactory ( ) ;
// Set factory constraints
factory.setSizeThreshold ( 4096 ) ; // 設置緩衝區大小,這裏是4kb
factory.setRepository ( tempPathFile ) ;// 設置緩衝區目錄
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload (
factory ) ;
// Set overall request size constraint
upload.setSizeMax ( 4194304 ) ; // 設置最大文件尺寸,這裏是4MB
List < 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了