
package com.android.upload;
import java.io.File;
import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.io.RandomAccessFile;
import java.net.Socket;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import com.android.service.UploadLogService;
import com.android.socket.utils.StreamTool;
public class UploadActivity extends Activity {
private EditText filenameText;
private TextView resulView;
private ProgressBar uploadbar;
private UploadLogService logService;
private boolean start=true;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
int length = msg.getData().getInt("size");
uploadbar.setProgress(length);
float num = (float)uploadbar.getProgress()/(float)uploadbar.getMax();
int result = (int)(num * 100);
resulView.setText(result "%");
if(uploadbar.getProgress()==uploadbar.getMax()){
Toast.makeText(UploadActivity.this, R.string.success, 1).show();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
logService = new UploadLogService(this);
filenameText = (EditText)this.findViewById(R.id.filename);
uploadbar = (ProgressBar) this.findViewById(R.id.uploadbar);
resulView = (TextView)this.findViewById(R.id.result);
Button button =(Button)this.findViewById(R.id.button);
Button button1 =(Button)this.findViewById(R.id.stop);
button1 .setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
start=false;
}
});
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
start=true;
String filename = filenameText.getText().toString();
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File uploadFile = new File(Environment.getExternalStorageDirectory(), filename);
if(uploadFile.exists()){
uploadFile(uploadFile);
}else{
Toast.makeText(UploadActivity.this, R.string.filenotexsit, 1).show();
}
}else{
Toast.makeText(UploadActivity.this, R.string.sdcarderror, 1).show();
}
}
});
}
/**
* 上传文件
* @param uploadFile
*/
private void uploadFile(final File uploadFile) {
new Thread(new Runnable() {
@Override
public void run() {
try {
uploadbar.setMax((int)uploadFile.length());
String souceid = logService.getBindId(uploadFile);
String head = "Content-Length=" uploadFile.length() ";filename=" uploadFile.getName() ";sourceid="
(souceid==null? "" : souceid) "\r\n";
Socket socket = new Socket("192.168.1.78",7878);
OutputStream outStream = socket.getOutputStream();
outStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());
String response = StreamTool.readLine(inStream);
String[] items = response.split(";");
String responseid = items[0].substring(items[0].indexOf("=") 1);
String position = items[1].substring(items[1].indexOf("=") 1);
if(souceid==null){//代表原来没有上传过此文件,往数据库添加一条绑定记录
logService.save(responseid, uploadFile);
}
RandomAccessFile fileOutStream = new RandomAccessFile(uploadFile, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
int length = Integer.valueOf(position);
while(start&&(len = fileOutStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
length = len;
Message msg = new Message();
msg.getData().putInt("size", length);
handler.sendMessage(msg);
}
fileOutStream.close();
outStream.close();
inStream.close();
socket.close();
if(length==uploadFile.length()) logService.delete(uploadFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
资源文件列表
AndroidSocket/SocketClient/.classpath , 364
AndroidSocket/SocketClient/.project , 848
AndroidSocket/SocketClient/.settings/org.eclipse.core.resources.prefs , 55
AndroidSocket/SocketClient/AndroidManifest.xml , 1080
AndroidSocket/SocketClient/bin/AndroidManifest.xml , 1080
AndroidSocket/SocketClient/bin/classes.dex , 12660
AndroidSocket/SocketClient/bin/classes/com/android/service/DBOpenHelper.class , 1262
AndroidSocket/SocketClient/bin/classes/com/android/service/UploadLogService.class , 1904
AndroidSocket/SocketClient/bin/classes/com/android/socket/utils/StreamTool.class , 1970
AndroidSocket/SocketClient/bin/classes/com/android/upload/BuildConfig.class , 345
AndroidSocket/SocketClient/bin/classes/com/android/upload/R$attr.class , 340
AndroidSocket/SocketClient/bin/classes/com/android/upload/R$drawable.class , 407
AndroidSocket/SocketClient/bin/classes/com/android/upload/R$id.class , 507
AndroidSocket/SocketClient/bin/classes/com/android/upload/R$layout.class , 394
AndroidSocket/SocketClient/bin/classes/com/android/upload/R$string.class , 620
AndroidSocket/SocketClient/bin/classes/com/android/upload/R.class , 531
AndroidSocket/SocketClient/bin/classes/com/android/upload/UploadActivity$1.class , 1785
AndroidSocket/SocketClient/bin/classes/com/android/upload/UploadActivity$2.class , 856
AndroidSocket/SocketClient/bin/classes/com/android/upload/UploadActivity$3.class , 1820
AndroidSocket/SocketClient/bin/classes/com/android/upload/UploadActivity$4.class , 4001
AndroidSocket/SocketClient/bin/classes/com/android/upload/UploadActivity.class , 2996
AndroidSocket/SocketClient/bin/jarlist.cache , 119
AndroidSocket/SocketClient/bin/resources.ap_ , 35022
AndroidSocket/SocketClient/bin/res/drawable-hdpi/ic_launcher.png , 9193
AndroidSocket/SocketClient/bin/res/drawable-ldpi/ic_launcher.png , 2658
AndroidSocket/SocketClient/bin/res/drawable-mdpi/ic_launcher.png , 5057
AndroidSocket/SocketClient/bin/res/drawable-xhdpi/ic_launcher.png , 14068
AndroidSocket/SocketClient/bin/SocketClient.apk , 43120
AndroidSocket/SocketClient/gen/com/android/upload/BuildConfig.java , 160
AndroidSocket/SocketClient/gen/com/android/upload/R.java , 1278
AndroidSocket/SocketClient/proguard-project.txt , 781
AndroidSocket/SocketClient/project.properties , 562
AndroidSocket/SocketClient/res/drawable-hdpi/ic_launcher.png , 9397
AndroidSocket/SocketClient/res/drawable-ldpi/ic_launcher.png , 2729
AndroidSocket/SocketClient/res/drawable-mdpi/ic_launcher.png , 5237
AndroidSocket/SocketClient/res/drawable-xhdpi/ic_launcher.png , 14383
AndroidSocket/SocketClient/res/layout/main.xml , 1299
AndroidSocket/SocketClient/res/values/strings.xml , 519
AndroidSocket/SocketClient/src/com/android/service/DBOpenHelper.java , 669
AndroidSocket/SocketClient/src/com/android/service/UploadLogService.java , 1145
AndroidSocket/SocketClient/src/com/android/socket/utils/StreamTool.java , 1627
AndroidSocket/SocketClient/src/com/android/upload/UploadActivity.java , 5644
AndroidSocket/SocketServer/.classpath , 301
AndroidSocket/SocketServer/.project , 388
AndroidSocket/SocketServer/.settings/org.eclipse.core.resources.prefs , 55
AndroidSocket/SocketServer/.settings/org.eclipse.jdt.core.prefs , 629
AndroidSocket/SocketServer/bin/com/android/socket/server/ServerWindow$1$1.class , 1176
AndroidSocket/SocketServer/bin/com/android/socket/server/ServerWindow$1.class , 1860
AndroidSocket/SocketServer/bin/com/android/socket/server/ServerWindow.class , 1390
AndroidSocket/SocketServer/bin/com/android/socket/server/SocketServer$FileLog.class , 1103
AndroidSocket/SocketServer/bin/com/android/socket/server/SocketServer$SocketTask.class , 5721
AndroidSocket/SocketServer/bin/com/android/socket/server/SocketServer.class , 3186
AndroidSocket/SocketServer/bin/com/android/socket/utils/StreamTool.class , 1970
AndroidSocket/SocketServer/src/com/android/socket/server/ServerWindow.java , 1435
AndroidSocket/SocketServer/src/com/android/socket/server/SocketServer.java , 6060
AndroidSocket/SocketServer/src/com/android/socket/utils/StreamTool.java , 1627
