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" />  

运行结果:



目录
相关文章
|
2月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
118 4
|
2月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
56 3
|
2月前
|
XML 安全 PHP
PHP与SOAP Web服务开发:基础与进阶教程
本文介绍了PHP与SOAP Web服务的基础和进阶知识,涵盖SOAP的基本概念、PHP中的SoapServer和SoapClient类的使用方法,以及服务端和客户端的开发示例。此外,还探讨了安全性、性能优化等高级主题,帮助开发者掌握更高效的Web服务开发技巧。
|
3月前
|
开发框架 自然语言处理 PHP
PHP在Web开发中的持久魅力与创新实践###
【10月更文挑战第17天】 本文探讨了PHP作为一门老牌却充满活力的编程语言,在现代Web开发中的独特优势和未来趋势。通过分析其简洁性、灵活性、强大生态系统及不断创新的特性,本文旨在揭示PHP为何能持续吸引开发者,并在技术快速迭代的时代保持竞争力。同时,文章也展望了PHP在未来Web开发领域的发展潜力,强调其在技术创新和社区支持下,依然能够引领Web开发的新潮流。 ###
45 9
|
3月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
200 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
SQL 安全 Go
PHP在Web开发中的安全实践与防范措施###
【10月更文挑战第22天】 本文深入探讨了PHP在Web开发中面临的主要安全挑战,包括SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等,并详细阐述了针对这些风险的有效防范策略。通过具体案例分析,揭示了安全编码的重要性,以及如何结合PHP特性与最佳实践来加固Web应用的安全性。全文旨在为开发者提供实用的安全指南,帮助构建更加安全可靠的PHP Web应用。 ###
48 1
|
3月前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
【10月更文挑战第5天】随着PHP 8的发布,这门历史悠久的脚本语言重获新生。PHP 8引入了联合类型、命名参数、属性、空安全运算符及JIT编译器等一系列新特性,不仅提升了开发者的编程体验,还增强了PHP在现代Web开发领域的竞争力。本文将详细介绍这些新特性及其对Web开发的影响。例如,联合类型允许函数参数接受多种类型,提高代码灵活性;命名参数则使函数调用更加直观易懂;属性可用于装饰类、方法等,提供额外信息;空安全运算符避免了访问未定义属性时的错误;JIT编译器则显著提升了性能。这些改进共同提升了代码质量和开发效率,巩固了PHP在Web开发中的地位。
27 4
|
2月前
|
关系型数据库 API PHP
PHP在Web开发中的优势与实践###
【10月更文挑战第24天】 PHP是一种流行的服务器端脚本语言,特别适合Web开发。其简单易学、灵活性高和广泛应用的特点,使其成为众多开发者的首选。本文将探讨PHP在Web开发中的主要优势及其实际应用,通过实例展示如何使用PHP构建高效、可靠的Web应用。无论你是初学者还是有经验的开发者,这篇文章都将提供有价值的见解和实用技巧。 ###
48 0
ly~
|
4月前
|
存储 监控 小程序
除了 Web 开发,PHP 还可以应用于哪些领域?
PHP 在 Web 开发之外还有多个应用场景:1)命令行脚本,如批量处理文件、数据库管理及系统监控;2)利用 PHP-GTK 等工具开发桌面应用,满足特定业务需求;3)结合微信云开发功能支持微信小程序后端,处理数据存储与用户认证;4)为小型游戏或特定类型游戏开发游戏服务器逻辑;5)在物联网领域作为后端语言处理设备数据交互与分析。
ly~
136 4
|
3月前
|
安全 编译器 API
探索PHP 8的新特性及其对现代Web开发的影响
探索PHP 8的新特性及其对现代Web开发的影响
20 0