android上传文件到服务器
2015-12-07 16:41
399 查看
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.UUID; public class UploadThread extends Thread { private String fileName; private String url; public static final String BOUNDARY = "---------------------------61132773524357"; public static final String PREFIX = "--"; public static final String END = "\r\n"; public UploadThread(String fileName, String url) { super(); this.fileName = fileName; this.url = url; } @Override public void run() { // TODO Auto-generated method stub DataOutputStream dos = null; FileInputStream fis = null; BufferedReader br = null; try { URL httpUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) httpUrl.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setDoInput(true); conn.setRequestProperty("Content-Type", "multipart/form-data; boundary="+BOUNDARY); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(PREFIX+BOUNDARY+END); String uploadFileName = UUID.randomUUID().toString() + "." + fileName.substring(fileName.lastIndexOf(".")+1); dos.writeBytes("Content-Disposition: form-data; name=\"myfile\";" + " filename=\""+uploadFileName+"\"" + END); dos.writeBytes(END); fis = new FileInputStream(new File(fileName)); byte[] b = new byte[1024*4]; int len; while((len=fis.read(b)) != -1) { dos.write(b, 0, len); } dos.writeBytes(END); dos.writeBytes(PREFIX+BOUNDARY+PREFIX+END); dos.flush(); br = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer sb = new StringBuffer(); String str; while((str=br.readLine()) != null) { sb.append(str); } System.out.println("response:" + sb.toString()); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (dos != null) { try { dos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (br != null) { try { br.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (fis != null) { try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
这里使用到的php服务器代码如下:
<?php if(empty($_FILES)) { echo "上传失败"; exit(); } //判断文件大小是否小于2M,如果大于2M,那么久不上传 $file_size=$_FILES['myfile']['size']; if($file_size>2*1024*1024) { echo "文件大小必须 > 2M"; exit(); } //is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的 //如果 filename 所给出的文件是通过 HTTP POST 上传的则返回 TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如 /etc/passwd if(is_uploaded_file($_FILES['myfile']['tmp_name'])) { //获取上传的文件 $uploaded_file = $_FILES['myfile']['tmp_name']; //定义需要上传到服务器的哪一个位置 $move_to_file = $_SERVER['DOCUMENT_ROOT']."/file/".$_FILES['myfile']['name']; //如果成功移动到服务器的具体位置,那么上传成功,否则失败 //为了防止上传中出现中文乱码导致上传失败,这里使用了iconv函数 if(move_uploaded_file($uploaded_file, iconv("utf-8","gb2312",$move_to_file))) { echo $_FILES['myfile']['tmp_name']."上传成功"; } else { echo $_FILES['myfile']['tmp_name']."上传失败"; } } else { echo $_FILES['myfile']['tmp_name']."上传失败"; } ?>
相关文章推荐
- android获取控件宽高
- Jenkins构建Android项目持续集成之简介篇
- Android抽象布局——include、merge 、ViewStub
- android动画及用法
- android学习笔记10(2)——多个Activity跳转和传值
- Android控件之GridView自定义
- android(37)(绑定远程服务)
- Android通信汇总
- Android L/5.0 数据连接设计更改
- 读Android群英传第四章
- Android 基础:SQLiteOpenHelper(SQLite的CURD)
- Android编程入门之HelloWorld项目目录结构分析
- Android 三种sendBroadCast的方式对比
- Android学习之保存用户登录信息
- android学习笔记10(1)——初识Activity和ACtivity的四种启动模式(LaunchMode)
- Android-X86集成houdini所做的修改
- 【android】Activity
- android -Input Events
- (android 地图实战开发)2 创建MapActivity,根据设备当前位置,显示地图
- Android Graphics.drawable之—ShapeDrawable学习