之前贴过个例子是android 入门学习笔记 上传大文件 这种的文件大小限制很严,一般30M以上就报错了。网上查了一下,还是推荐用Socket连接进行大文件上传。
今天测试了一下之前网上找的例子,通过Socket实现的android下大文件上传,服务器端用java接收。测试上传了个200M的文件,不到三分钟!还是可以接受的。
只是做了个简单的测试例子,还没有考虑到权限问题(手机上传资料到服务器端,应该需要做身份验证。。)
- connection.setChunkedStreamingMode(chunkSize);
使用这个代码就可以了,connection为 HttpURLConnection的实例
完整代码如下:
- /* 上传文件至Server的方法 */
- private void uploadFile()
- {
- String end = "\r\n";
- String twoHyphens = "--";
- String boundary = "*****";
- try
- {
- URL url =new URL(actionUrl);
- HttpURLConnection con=(HttpURLConnection)url.openConnection();
- con.setChunkedStreamingMode(51200);
- /* 允许Input、Output,不使用Cache */
- con.setDoInput(true);
- con.setDoOutput(true);
- con.setUseCaches(false);
- /* 设置传送的method=POST */
- con.setRequestMethod("POST");
- /* setRequestProperty */
- con.setRequestProperty("Connection", "Keep-Alive");
- con.setRequestProperty("Charset", "UTF-8");
- con.setRequestProperty("Content-Type",
- "multipart/form-data;boundary="+boundary);
- /* 设置DataOutputStream */
- DataOutputStream ds =
- new DataOutputStream(con.getOutputStream());
- ds.writeBytes(twoHyphens + boundary + end);
- ds.writeBytes("Content-Disposition: form-data; " +
- "name=\"file1\";filename=\"" +
- newName +"\"" + end);
- ds.writeBytes(end);
- /* 取得文件的FileInputStream */
- FileInputStream fStream = new FileInputStream(uploadFile);
- /* 设置每次写入1024bytes */
- int bufferSize = 1024;
- byte[] buffer = new byte[bufferSize];
- int length = -1;
- /* 从文件读取数据至缓冲区 */
- while((length = fStream.read(buffer)) != -1)
- {
- /* 将资料写入DataOutputStream中 */
- ds.write(buffer, 0, length);
- }
- ds.writeBytes(end);
- ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
- /* close streams */
- fStream.close();
- ds.flush();
- /* 取得Response内容 */
- InputStream is = con.getInputStream();
- int ch;
- StringBuffer b =new StringBuffer();
- while( ( ch = is.read() ) != -1 )
- {
- b.append( (char)ch );
- }
- /* 将Response显示于Dialog */
- showDialog(b.toString().trim());
- /* 关闭DataOutputStream */
- ds.close();
- }
- catch(Exception e)
- {
- showDialog(""+e);
- }
- }
应要求贴上源码下载地址:http://download.csdn.net/detail/jdsjlzx/8150031