Android上传文件到Web服务器,PHP接收文件

简介:  Android上传文件到服务器,通常采用构造http协议的方法,模拟网页POST方法传输文件,服务器端可以采用JavaServlet或者PHP来接收要传输的文件。

 Android上传文件到服务器,通常采用构造http协议的方法,模拟网页POST方法传输文件,服务器端可以采用JavaServlet或者PHP来接收要传输的文件。使用JavaServlet来接收文件的方法比较常见,在这里给大家介绍一个简单的服务器端使用PHP语言来接收文件的例子。

服务器端代码比较简单,接收传输过来的文件:

[php]  view plain  copy
  1. <?php  
  2. $target_path  = "./upload/";//接收文件目录  
  3. $target_path = $target_path . basename$_FILES['uploadedfile']['name']);  
  4. if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {  
  5.    echo "The file ".  basename$_FILES['uploadedfile']['name']). " has been uploaded";  
  6. }  else{  
  7.    echo "There was an error uploading the file, please try again!" . $_FILES['uploadedfile']['error'];  
  8. }  
  9. ?>  

手机客户端代码:

[java]  view plain  copy
  1. package com.figo.uploadfile;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.DataOutputStream;  
  5. import java.io.FileInputStream;  
  6. import java.io.InputStream;  
  7. import java.io.InputStreamReader;  
  8. import java.net.HttpURLConnection;  
  9. import java.net.URL;  
  10. import android.app.Activity;  
  11. import android.os.Bundle;  
  12. import android.view.View;  
  13. import android.widget.Button;  
  14. import android.widget.TextView;  
  15. import android.widget.Toast;  
  16.   
  17. public class UploadfileActivity extends Activity  
  18. {  
  19.   // 要上传的文件路径,理论上可以传输任何文件,实际使用时根据需要处理  
  20.   private String uploadFile = "/sdcard/testimg.jpg";  
  21.   private String srcPath = "/sdcard/testimg.jpg";  
  22.   // 服务器上接收文件的处理页面,这里根据需要换成自己的  
  23.   private String actionUrl = "http://10.100.1.208/receive_file.php";  
  24.   private TextView mText1;  
  25.   private TextView mText2;  
  26.   private Button mButton;  
  27.   
  28.   @Override  
  29.   public void onCreate(Bundle savedInstanceState)  
  30.   {  
  31.     super.onCreate(savedInstanceState);  
  32.     setContentView(R.layout.main);  
  33.   
  34.     mText1 = (TextView) findViewById(R.id.myText2);  
  35.     mText1.setText("文件路径:\n" + uploadFile);  
  36.     mText2 = (TextView) findViewById(R.id.myText3);  
  37.     mText2.setText("上传网址:\n" + actionUrl);  
  38.     /* 设置mButton的onClick事件处理 */  
  39.     mButton = (Button) findViewById(R.id.myButton);  
  40.     mButton.setOnClickListener(new View.OnClickListener()  
  41.     {  
  42.       @Override  
  43.       public void onClick(View v)  
  44.       {  
  45.         uploadFile(actionUrl);  
  46.       }  
  47.     });  
  48.   }  
  49.   
  50.   /* 上传文件至Server,uploadUrl:接收文件的处理页面 */  
  51.   private void uploadFile(String uploadUrl)  
  52.   {  
  53.     String end = "\r\n";  
  54.     String twoHyphens = "--";  
  55.     String boundary = "******";  
  56.     try  
  57.     {  
  58.       URL url = new URL(uploadUrl);  
  59.       HttpURLConnection httpURLConnection = (HttpURLConnection) url  
  60.           .openConnection();  
  61.       // 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃  
  62.       // 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。  
  63.       httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K  
  64.       // 允许输入输出流  
  65.       httpURLConnection.setDoInput(true);  
  66.       httpURLConnection.setDoOutput(true);  
  67.       httpURLConnection.setUseCaches(false);  
  68.       // 使用POST方法  
  69.       httpURLConnection.setRequestMethod("POST");  
  70.       httpURLConnection.setRequestProperty("Connection""Keep-Alive");  
  71.       httpURLConnection.setRequestProperty("Charset""UTF-8");  
  72.       httpURLConnection.setRequestProperty("Content-Type",  
  73.           "multipart/form-data;boundary=" + boundary);  
  74.   
  75.       DataOutputStream dos = new DataOutputStream(  
  76.           httpURLConnection.getOutputStream());  
  77.       dos.writeBytes(twoHyphens + boundary + end);  
  78.       dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""  
  79.           + srcPath.substring(srcPath.lastIndexOf("/") + 1)  
  80.           + "\""  
  81.           + end);  
  82.       dos.writeBytes(end);  
  83.   
  84.       FileInputStream fis = new FileInputStream(srcPath);  
  85.       byte[] buffer = new byte[8192]; // 8k  
  86.       int count = 0;  
  87.       // 读取文件  
  88.       while ((count = fis.read(buffer)) != -1)  
  89.       {  
  90.         dos.write(buffer, 0, count);  
  91.       }  
  92.       fis.close();  
  93.   
  94.       dos.writeBytes(end);  
  95.       dos.writeBytes(twoHyphens + boundary + twoHyphens + end);  
  96.       dos.flush();  
  97.   
  98.       InputStream is = httpURLConnection.getInputStream();  
  99.       InputStreamReader isr = new InputStreamReader(is, "utf-8");  
  100.       BufferedReader br = new BufferedReader(isr);  
  101.       String result = br.readLine();  
  102.   
  103.       Toast.makeText(this, result, Toast.LENGTH_LONG).show();  
  104.       dos.close();  
  105.       is.close();  
  106.   
  107.     } catch (Exception e)  
  108.     {  
  109.       e.printStackTrace();  
  110.       setTitle(e.getMessage());  
  111.     }  
  112.   }  
  113. }  

在AndroidManifest.xml文件里添加网络访问权限:

[plain]  view plain  copy
  1. <uses-permission android:name="android.permission.INTERNET" />  

运行结果:



目录
相关文章
|
8月前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
200 20
|
8月前
|
应用服务中间件 PHP nginx
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
|
8月前
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
172 0
|
11月前
|
自然语言处理 编译器 应用服务中间件
PHP在服务器上的运行过程
PHP在服务器上的运行过程
177 7
|
11月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
226 3
|
11月前
|
监控 PHP Apache
优化 PHP-FPM 参数配置:实现服务器性能提升
优化PHP-FPM的参数配置可以显著提高服务器的性能和稳定性。通过合理设置 `pm.max_children`、`pm.start_servers`、`pm.min_spare_servers`、`pm.max_spare_servers`和 `pm.max_requests`等参数,并结合监控和调优措施,可以有效应对高并发和负载波动,确保Web应用程序的高效运行。希望本文提供的优化建议和配置示例能够帮助您实现服务器性能的提升。
540 3
|
17天前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
151 0
PHP和Mysql前后端交互效果实现
|
6月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
298 17
|
11月前
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
418 0
|
7月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
151 18