上传文件 服务端模拟存储

这里可以选用Parcelable来进行序列化,parcelable效率更高,我这里选用的是serializable

服务端和客户端都要有此文件,并且所在的包名要一致

不懂可以参考parcelable(http://www.cnblogs.com/mydomainlistentome/p/4687173.html);

package lyl.sole.util;

import java.io.Serializable;

public class SerializUtil implements Serializable {
	private String title;
	private byte[] contentData;
	private long contentLength;
	private String ext;
	private String TypeMime;

	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 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;
	}
	public String getTypeMime() {
		return TypeMime;
	}
	public void setTypeMime(String typeMime) {
		TypeMime = typeMime;
	}

}

客户端

package com.example.webfile;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import lyl.sole.util.SerializUtil;

import com.example.webfile.R.id;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	private Button send;
	private TextView show;
	private static final int FINISH = 0 ;//在主线程中更新UI
	private Handler handle = new Handler() {
		public void handleMessage(Message msg) {
			switch(msg.what) {
			case FINISH:
			String result = msg.obj.toString() ;	// 取出数据
			if ("true".equals(result)) {
				show.setText("操作成功!");
			} else {
				show.setText("操作失败!");
			}
			break ;
			}
		}

	};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		send = (Button) findViewById(id.send);
		show = (TextView) findViewById(id.show);

		send.setOnClickListener(new sendFile());
	}

	private class sendFile implements OnClickListener {
		public void onClick(View arg0) {
			Thread thread = new Thread(null, inThreadOn, "sendfile");
		//在子线程中更新执行操作               thread.start();
		}

	}

	private SerializUtil parcelFile() {
		SerializUtil serializ = new SerializUtil();
		serializ.setTitle("小胡子");
		serializ.setTypeMime("image/jpeg");
		File file = new File(Environment.getExternalStorageDirectory()
				.toString() + File.separator + "head_8.png");
		InputStream input = null;
		try {              //读入图片
			input = new FileInputStream(file);
			ByteArrayOutputStream output = new ByteArrayOutputStream();
			byte[] data = new byte[1024];
			int leng = 0;            //读入字节数组
			while ((leng = input.read(data)) != -1) {            //读出
				output.write(data, 0, leng);
  			}              //资源序列化
    			serializ.setContentData(output.toByteArray());
			serializ.setContentLength(file.length());
			serializ.setExt("png");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				input.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return serializ;

	}

	public Runnable inThreadOn = new Runnable() {
		public void run() {//在子线程中执行网络操作
			upLoadFile();
		}
	};

	private void upLoadFile() {
		try {
			final Socket client = new Socket("192.168.156.1", 8888);
			// 读取返回数据
			BufferedReader bufferedReader = new BufferedReader(
					new InputStreamReader(client.getInputStream()));
			//想服务端写数据               ObjectOutputStream oos = new ObjectOutputStream(
					client.getOutputStream());
			SerializUtil getdata = parcelFile();
			oos.writeObject(getdata);
			String result = null;
			result = bufferedReader.readLine();
			oos.close();            //传message通知主线程跟新UI
			// Message msg=Message.obtain();
			// msg.obj=result;
			// msg.sendToTarget();
			Message msg=handle.obtainMessage(FINISH,result);
			msg.sendToTarget();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}

服务端

import java.net.ServerSocket;

public class Service {

	public static void main(String[] args) throws Exception {
		ServerSocket server=new ServerSocket(8888);
		boolean flag=true;
		while(flag){
			// 启动线程
			new Thread(new ServiceUtil(server.accept())).start();
		}
		// 关闭
		server.close();
	}

}

服务端存储

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 lyl.sole.util.SerializUtil;

public class ServiceUtil implements Runnable {
	// 存储路径
	private static final String DIRPATH = "D:" + File.separator + "android"
			+ File.separator;
	private Socket client = null;
	private SerializUtil serializ = null;
	private int i = 0;

	public ServiceUtil(Socket client) {
		this.client = client;
		System.out.println("客户端连接" + i++);
	}

	@Override
	public void run() {
		PrintStream out;
		try {
			out = new PrintStream(client.getOutputStream());
			// 反序列化
			ObjectInputStream in = new ObjectInputStream(
					client.getInputStream());
			serializ = (SerializUtil) in.readObject();
			System.out.println("标题" + serializ.getTitle());
			System.out.println("类型" + serializ.getTypeMime());
			System.out.println("大小" + serializ.getContentLength());
			out.print(saveFile());
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				this.client.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

	}
	private boolean saveFile() throws Exception { // 负责文件内容的保存
		//UUID 通用唯一标识符
		File file=new File(DIRPATH+UUID.randomUUID()+"."+this.serializ.getExt());
		if(!file.getParentFile().exists()){
			file.getParentFile().mkdir();
		}
		OutputStream output=null;
		output=new FileOutputStream(file);
		output.write(this.serializ.getContentData());
			return true;
	}
}

  权限、布局 就不粘了。

 

时间: 2024-10-12 17:14:38

上传文件 服务端模拟存储的相关文章

文件上传,服务端压缩文件方法,重点是png与gif图片的压缩,保证了透明度与动画

1 /// <summary> 2 /// 上传文件帮助类 3 /// </summary> 4 public class ImageUploadHelper 5 { 6 7 #region SaveVideoFirstImg 根据视频路径生成视频对应的图片 8 /// <summary> 9 /// 根据视频路径生成视频对应的图片 10 /// </summary> 11 /// <param name="videoUrl">

afinal 上传文件服务端接受参数为空

做个了上传和提交数据的测试,遇到点问题,如果只加 string类型的参数,server端接受到参数没问题,如果加上file类型的,server端servlet 接受到参数都为空了. 代码如下 FinalHttp fh = new FinalHttp(); AjaxParams params = new AjaxParams();     params.put("action", "test"); params.put("username", &q

文件上传简单服务端和客户端 Java 实现

背景 楼主最近很悲惨,下载了 Android 的源码,然后 mac 的硬盘空间就没了,而且编译 Android 源码需要将创建一个大小写不敏感的分区,所以需要将源码存在别的地方,最初是使用的硬盘,但是失败了(硬盘用的 exfat 格式), 后来用云盘,笔记,QQ 都不行,要么文件过多不给传,要么要收费,总之就是不行,正当踌躇之际,想起了一句老话,'自己动手,丰衣足食', 所以萌生了自己写个工具的念头,当然,给自己用的,不需要写的那么好,但是写的过程中出现了一些小问题,所以写这篇博客记录一下. 问

ASP.Net 5 上传文件通过虚拟路径存储

先贴上代码 [HttpPost] public IActionResult ImportTeaching(IFormFile file) { string root = @"Temp/teachingfile/"; string phyPayh = evn.MapPath(root); if (file != null) { var parsedContentDisposition = ContentDispositionHeaderValue.Parse(file.ContentDi

Flex上传文件Java端解决中文乱码问题

1.Flex端进行编码 public function encodeStr(str:String, charSet:String):String { var result:String =""; var bytes:ByteArray = new ByteArray(); bytes.writeMultiByte(str, charSet); for (var i:uint; i<bytes.length; i++) { result += escape(String.fromC

上传文件js端处理

var formData = new FormData(); for (var i = 0; i < $("#files")[0].files.length; i++) { formData.append("file", $("#files")[0].files[i]); } $.ajax({ type: "post", url: '', data: formData, cache: false, processData

Hessian学习总结(二)——使用hessian上传文件

hessian较早版本通过 byte[] 进行文件传输:4.0之后支持 InputStream 作为参数或返回值进行传输. 注意:hessian会读取整个文件,如果文件过大,会导致JVM内存溢出.可以通过控制上传文件的大小,设置合理的JVM参数,以及采用随机读取方式来解决. 一.创建Hessian服务端 创建一个FileUploader Web项目作为文件上传的服务端,如下图所示: 1. 1.创建文件上传服务接口FileUploadServiceI FileUploadServiceI接口代码如

文件上传控件-如何上传文件-文件夹断点续传

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据.上传影音文件等.如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成. 下面从文件上传方式入手,整理大文件上传的思路,并给出了相关实例代码,由于PHP内置了比较方便的文件拆分和拼接方法,因此服务端代码使用

网页上传文件夹的解决方案

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据.上传影音文件等.如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成. 下面从文件上传方式入手,整理大文件上传的思路,并给出了相关实例代码,由于PHP内置了比较方便的文件拆分和拼接方法,因此服务端代码使用