上传文件

 

 

 



 



 

 

我的外网IP     192.168.1.15

 

 

 

 

启动tomcat

 

 

 

 

服务器端:

 

另起一个eclipse,换工作空间,新建一个java项目。

 

 

 

 

在包com.li.util里新建UploadFile.java:

 

package com.li.util;

 

import java.io.Serializable;

 

@SuppressWarnings("serial")

public class UploadFile implements Serializable {

  private String title ;

  private byte [] contentData ;

  private String mimeType ;

  private long contentLength ;

  private String ext ;

  public String getTitle() {

     return title;

  }

  public void setTitle(String title) {

     this.title = title;

  }

  public byte[] getContentData() {

     return contentData;

  }

  public void setContentData(byte[] contentData) {

     this.contentData = contentData;

  }

  public String getMimeType() {

     return mimeType;

  }

  public void setMimeType(String mimeType) {

     this.mimeType = mimeType;

  }

  public long getContentLength() {

     return contentLength;

  }

  public void setContentLength(long contentLength) {

     this.contentLength = contentLength;

  }

  public String getExt() {

     return ext;

  }

  public void setExt(String ext) {

     this.ext = ext;

  }

}

 

 

 

 

 

 

在包com.li.server里新建ServerThreadUtil.java:

 

package com.li.server;

 

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.Socket;

import java.util.UUID;

 

import com.li.util.UploadFile;

 

public class ServerThreadUtil implements Runnable {

  private static final String DIRPATH = "D:" + File.separator + "liyewenfile"

       + File.separator; // 目录路径

  private Socket client = null;

  private UploadFile upload = null;

 

  public ServerThreadUtil(Socket client) {

     this.client = client;

     System.out.println("新的客户端连接...");

  }

 

  @Override

  public void run() {

     try {

       PrintStream out = new PrintStream(this.client.getOutputStream());

       ObjectInputStream ois = new ObjectInputStream(

            client.getInputStream()); // 反序列化

       this.upload = (UploadFile) ois.readObject(); // 读取对象

       System.out.println("文件标题:" + this.upload.getTitle());

       System.out.println("文件类型:" + this.upload.getMimeType());

       System.out.println("文件大小:" + this.upload.getContentLength());

       out.print(this.saveFile()) ;

     } catch (Exception e) {

       e.printStackTrace();

     } finally {

       try {

         this.client.close();

       } catch (IOException e) {

         e.printStackTrace();

       }

     }

  }

 

  private boolean saveFile() throws Exception { // 负责文件内容的保存

     File file = new File(DIRPATH + UUID.randomUUID() + "."

         + this.upload.getExt());

     if (!file.getParentFile().exists()) {

       file.getParentFile().mkdir();

     }

     OutputStream output = null;

     try {

       output = new FileOutputStream(file) ;

       output.write(this.upload.getContentData()) ;

       return true ;

     } catch (Exception e) {

       throw e;

     } finally {

       output.close();

     }

  }

}

 

 

 

 

 

在包com.li.server里新建MyServer.java:

 

package com.li.server;

 

import java.net.ServerSocket;

 

public class MyServer {

 

  public static void main(String[] args) throws Exception {

     ServerSocket server = new ServerSocket(8888); // 服务器端端口

     boolean flag = true; // 定义标记,可以一直死循环

    while (flag) { // 通过标记判断循环

       new Thread(new ServerThreadUtil(server.accept())).start(); // 启动线程

     }

     server.close(); // 关闭服务器

  }

 

}

 

 

 

 

 

 

 

 

客户端:

 

 

在sdcard里面存放一张名为disney的图片。

 

 

在main.xml中:

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:orientation="vertical"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

  android:gravity="center_horizontal"

  android:background="#000000">

  <Button

     android:id="@+id/send"

     android:layout_marginTop="8dp"

     android:layout_width="160dp"

     android:layout_height="40dp"

     android:background="#3399ff"

     android:textColor="#ffffff"

     android:text="连接SocketServer" />

  <TextView

     android:id="@+id/info"

     android:gravity="center_horizontal"

     android:layout_marginTop="8dp"

     android:layout_width="fill_parent"

     android:layout_height="wrap_content"

     android:textColor="#ffffff"

     android:text="等待服务器端发送回的显示信息...." />

</LinearLayout>

 

 

 

 

 

在com.li. util包UploadFile.java中:

 

package com.li.util;

 

import java.io.Serializable;

 

@SuppressWarnings("serial")

public class UploadFile implements Serializable {

  private String title ;

  private byte [] contentData ;

  private String mimeType ;

  private long contentLength ;

  private String ext ;

  public String getTitle() {

     return title;

  }

  public void setTitle(String title) {

     this.title = title;

  }

  public byte[] getContentData() {

     return contentData;

  }

  public void setContentData(byte[] contentData) {

     this.contentData = contentData;

  }

  public String getMimeType() {

     return mimeType;

  }

  public void setMimeType(String mimeType) {

     this.mimeType = mimeType;

  }

  public long getContentLength() {

     return contentLength;

  }

  public void setContentLength(long contentLength) {

     this.contentLength = contentLength;

  }

  public String getExt() {

     return ext;

  }

  public void setExt(String ext) {

     this.ext = ext;

  }

}

 

 

 

 

 

 

在com.li. clientproject包MyClientDemo.java中:

 

package com.li.clientproject;

 

import java.io.BufferedReader;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.ObjectOutputStream;

import java.net.Socket;

 

import com.li.util.UploadFile;

 

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.TextView;

 

public class MyClientDemo extends Activity {

  private Button send = null;

  private TextView info = null;

  private static final int FINISH = 0 ;

  private Handler myHandler = new Handler(){

 

     @Override

     public void handleMessage(Message msg) {

       switch(msg.what) {

       case FINISH:

         String result = msg.obj.toString() ; // 取出数据

         if ("true".equals(result)) {

            MyClientDemo.this.info.setText("操作成功!");

         } else {

            MyClientDemo.this.info.setText("操作失败!");

         }

         break ;

       }

     }

  } ;

 

  @Override

  public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     super.setContentView(R.layout.main);

     this.send = (Button) super.findViewById(R.id.send);

     this.info = (TextView) super.findViewById(R.id.info);

     this.send.setOnClickListener(new SendOnClickListener());

  }

 

  private class SendOnClickListener implements OnClickListener {

     public void onClick(View v) {

       try {

         final Socket client = new Socket("192.168.1.15", 8888);

         final BufferedReader buf = new BufferedReader(new InputStreamReader(

              client.getInputStream())); // 读取返回的数据

         new Thread(new Runnable() {

 

            public void run() {

              try {

                ObjectOutputStream oos = new ObjectOutputStream(

                     client.getOutputStream());

                UploadFile myFile = SendOnClickListener.this

                     .getUploadFile();

                oos.writeObject(myFile);

                String str = buf.readLine() ; // 读取数据

                oos.close();

                Message msg = MyClientDemo.this.myHandler

                     .obtainMessage(FINISH, str);

                MyClientDemo.this.myHandler.sendMessage(msg) ;

                buf.close();

                client.close();

              } catch (Exception e) {

                e.printStackTrace() ;

              }

            }

         }).start();

       } catch (Exception e) {

         e.printStackTrace();

       }

     }

 

     private UploadFile getUploadFile() throws Exception { // 包装了传送数据

       UploadFile myFile = new UploadFile();

       myFile.setTitle("图片"); // 设置标题

       myFile.setMimeType("image/jpeg"); // 图片的类型

       File file = new File(Environment.getExternalStorageDirectory()

            .toString() + File.separator + "disney.jpg");

       InputStream input = null;

       try {

         input = new FileInputStream(file); // 从文件中读取

         ByteArrayOutputStream bos = new ByteArrayOutputStream();

         byte data[] = new byte[1024];

         int len = 0;

         while ((len = input.read(data)) != -1) {

           bos.write(data, 0, len);

         }

         myFile.setContentData(bos.toByteArray());

         myFile.setContentLength(file.length());

         myFile.setExt("jpg");

       } catch (Exception e) {

         throw e;

       } finally {

         input.close();

       }

       return myFile;

     }

 

  }

 

}

 

 

 

在AndroidManifest.xml中修改权限:

 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.li.clientproject"

    android:versionCode="1"

    android:versionName="1.0" >

 

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="15" />

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

    <application

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name=".MyClientDemo"

            android:label="@string/title_activity_my_client_demo" >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />

 

                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

 

</manifest>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值