Android实现实现TCP断点上传断点上传 后台后台C#服务接收服务接收
终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自
己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载。但稳定性不能保证,一旦断开,无法续传。所以
得采用另一种流行的做法,TCP上传大文件。
网上查找了一些资料,大多数是断点下载,然后就是单独的C#端的上传接收,或是HTTP的,或是只有android端的,由于任
务紧所以之前找的首选方案当然是Http先来实现文件上传,终端采用Post方法,将文件直接传至后端,后端通过File来获得。
android端:端:
RequestParams params = new RequestParams();
File file = getTempFile();//获得本地文件
try {
params.put("file", file);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
AsyncHttpUtil.post(URL + "/UpLoad", params, new JsonHttpResponseHandler() {
……
后端:
var file = Request.Files[“file”];
file.SaveAs(upFileName);
还有其它更好的处理方法,也可以传流进来,不通过file文件格式。 在网络好的情况下没什么问题,但网络差点后来经常上传
一半掉线或多个客户端上传出现连不上的情况,对于大文件极不稳定,所以赶紧研发TCP协议文件断点上传。
也有网友实现了Http断点上传,既然大文件不行,那就将文件分割成小文件来上传,纯NET的主要方法:
上传:
bool result = true;
long cruuent = 0;
FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader bReader = new BinaryReader(fStream);
//模拟断点上传,第一次只上传 100 个字节
long length = 100;
fileName = fileName.Substring(fileName.LastIndexOf('\') + 1);
#region 开始上传文件
try
{
byte[] data;
#region 分割文件上传
for (; cruuent <= length; cruuent = cruuent + byteCount)
{
if (cruuent + byteCount > length)
{
data = new byte[Convert.ToInt64((length - cruuent))];
bReader.Read(data, 0, Convert.ToInt32((length - cruuent)));
}
else
{
data = new byte[byteCount];
bReader.Read(data, 0, byteCount);
}
try
{
Hashtable parms = new Hashtable();
parms.Add("fileName", fileName);
parms.Add("npos", cruuent.ToString());
byte[] byRemoteInfo = PostData(serverPath + "UpLoadServer.aspx", data, parms);
}
catch (Exception ex)