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

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

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

手机客户端代码:

package com.figo.uploadfile; 

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast; 

public class UploadfileActivity extends Activity
{
 // 要上传的文件路径,理论上可以传输任何文件,实际使用时根据需要处理
 private String uploadFile = "/sdcard/testimg.jpg";
 private String srcPath = "/sdcard/testimg.jpg";
 // 服务器上接收文件的处理页面,这里根据需要换成自己的
 private String actionUrl = "http://10.100.1.208/receive_file.php";
 private TextView mText1;
 private TextView mText2;
 private Button mButton; 

 @Override
 public void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main); 

  mText1 = (TextView) findViewById(R.id.myText2);
  mText1.setText("文件路径:\n" + uploadFile);
  mText2 = (TextView) findViewById(R.id.myText3);
  mText2.setText("上传网址:\n" + actionUrl);
  /* 设置mButton的onClick事件处理 */
  mButton = (Button) findViewById(R.id.myButton);
  mButton.setOnClickListener(new View.OnClickListener()
  {
   @Override
   public void onClick(View v)
   {
    uploadFile(actionUrl);
   }
  });
 } 

 /* 上传文件至Server,uploadUrl:接收文件的处理页面 */
 private void uploadFile(String uploadUrl)
 {
  String end = "\r\n";
  String twoHyphens = "--";
  String boundary = "******";
  try
  {
   URL url = new URL(uploadUrl);
   HttpURLConnection httpURLConnection = (HttpURLConnection) url
     .openConnection();
   // 设置每次传输的流大小,可以有效防止手机因为内存不足崩溃
   // 此方法用于在预先不知道内容长度时启用没有进行内部缓冲的 HTTP 请求正文的流。
   httpURLConnection.setChunkedStreamingMode(128 * 1024);// 128K
   // 允许输入输出流
   httpURLConnection.setDoInput(true);
   httpURLConnection.setDoOutput(true);
   httpURLConnection.setUseCaches(false);
   // 使用POST方法
   httpURLConnection.setRequestMethod("POST");
   httpURLConnection.setRequestProperty("Connection", "Keep-Alive");
   httpURLConnection.setRequestProperty("Charset", "UTF-8");
   httpURLConnection.setRequestProperty("Content-Type",
     "multipart/form-data;boundary=" + boundary); 

   DataOutputStream dos = new DataOutputStream(
     httpURLConnection.getOutputStream());
   dos.writeBytes(twoHyphens + boundary + end);
   dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
     + srcPath.substring(srcPath.lastIndexOf("/") + 1)
     + "\""
     + end);
   dos.writeBytes(end); 

   FileInputStream fis = new FileInputStream(srcPath);
   byte[] buffer = new byte[8192]; // 8k
   int count = 0;
   // 读取文件
   while ((count = fis.read(buffer)) != -1)
   {
    dos.write(buffer, 0, count);
   }
   fis.close(); 

   dos.writeBytes(end);
   dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
   dos.flush(); 

   InputStream is = httpURLConnection.getInputStream();
   InputStreamReader isr = new InputStreamReader(is, "utf-8");
   BufferedReader br = new BufferedReader(isr);
   String result = br.readLine(); 

   Toast.makeText(this, result, Toast.LENGTH_LONG).show();
   dos.close();
   is.close(); 

  } catch (Exception e)
  {
   e.printStackTrace();
   setTitle(e.getMessage());
  }
 }
} 

在AndroidManifest.xml文件里添加网络访问权限:
<uses-permission android:name="android.permission.INTERNET" />

运行结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2017-03-29

Android向node.js编写的服务器发送数据并接收请求

本文实例为大家分享了Android九宫格图片展示的具体代码,供大家参考,具体内容如下 首先时node.js服务器端代码 var http = require("http"); var fs = require("fs"); var queryString = require('querystring'); var url = require('url'); var util = require('util'); http.createServer(function

Android编程向服务器发送请求时出现中文乱码问题的解决方法

本文实例讲述了Android编程向服务器发送请求时出现中文乱码问题的解决方法.分享给大家供大家参考,具体如下: 我们在andorid项目中通过get方式向服务器发送请求,其中url参数带有中文,将会产生乱码,乱码产生的原因有两种: 1. 在提交参数时,没有对中文参数进行URL编码 2. Tomcat服务器默认采用的是IOS8859-1编码(不支持中文)得到参数值 解决: 1. 进入android项目,在其中要提交参数的时候,对参数的值进行编码: 复制代码 代码如下: URLEncoder.enc

基于Android 错误信息捕获发送至服务器的详解

程序员最头疼的事情就是bug和debug.这次debug长达20天,搞的我心力交瘁.累,因为Android兼容性,不同手机会有不同的bug出来,而且很难复现,所以就上网找了下类似保存错误log到文件再上传到服务器,现把源码也共享出来.上传至服务器的代码我没加.相信大家都有现成的代码了. 先讲下原理,跟JavaEE的自定义异常捕获一样,将错误一直向上抛,然后在最上层统一处理.这里就可以获得Exception Message,进行保存操作异常捕获类如下: 复制代码 代码如下: /**  * @aut

Android使用第三方服务器Bmob实现发送短信验证码

调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉用户输入的数字进行判断,如果输入的和发送的相等,则验证成功. 第一步.请求验证码: SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sendTime = format.format(new Date());

Android使用httpPost向服务器发送请求的方法

本文实例讲述了Android使用httpPost向服务器发送请求的方法.分享给大家供大家参考,具体如下: import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http

Android发送xml数据给服务器的方法

本文实例讲述了Android发送xml数据给服务器的方法.分享给大家供大家参考.具体如下: 一.发送xml数据: public static void main(String[] args) throws Exception { String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><videos><video><title>中国</title&

Android解析XML文件升级APK的方法

安装APK public class DownLoadApk { public static SharedPreferences sharedPrederences = null; //启动安装界面 public static void DownId(Context context, long downId){ DownloadManager mDownloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOA

PHP实现使用DOM将XML数据存入数组的方法示例

本文实例讲述了PHP实现使用DOM将XML数据存入数组的方法.分享给大家供大家参考,具体如下: <?php $doc = new DOMDocument('1.0','utf-8'); $doc->load("config.xml"); $roots=$doc->documentElement;//获取根节点也就是config(仅有一个) $childs=$roots->childNodes;//获取根节点下所有子节点也就是 db smarty for($i=0

Python 3.x基于Xml数据的Http请求方法

1. 前言 由于公司的一个项目是基于B/S架构与WEB服务通信,使用XML数据作为通信数据,在添加新功能时,WEB端与客户端分别由不同的部门负责,所以在WEB端功能实现过程中,需要自己发起请求测试,于是便选择了使用Python编写此脚本.另外由于此脚本最开始希望能在以后发展成具有压力测试的功能,所以除了基本的访问之外,添加了多线程请求. 整个脚本主要涉及到的关于Python的知识点包括: 基于urllib.request的Http访问 多线程 类与方法的定义 全局变量的定义与使用 文件的读取与写

Android上传文件到服务器的方法

本文实例为大家分享了Android端实现文件上传的具体代码,供大家参考,具体内容如下 1).新建一个Android项目命名为androidUpload,目录结构如下: 2).新建FormFile类,用来封装文件信息 package com.ljq.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream;

Android序列化XML数据

什么是XML?首先我们先了解一下什么是XML.XML,可扩展标记语言 (Extensible Markup Language) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,这是百度百科的解释.而XML是一种在Internet中传输数据的常见格式,它与HTML一样,都是SGML(标准通用标记语言),无论你是需要通过Internet访问数据,或者发送数据给Web服务,都可能需要用到XML的知识.恰恰Android应用程序

Android 解析XML 文件的四种方法总结

java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这个层次结构允许开发人员在树中寻找特定信息.分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作.由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的.DOM以及广义的基于树的处理具有几个优点.首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改.它还可以

在Android设备上搭建Web服务器的方法

一般而言,Android 应用在请求数据时都是以 Get 或 Post 等方式向远程服务器发起请求,那你有没有想过其实我们也可以在 Android 设备上搭建一个小型 Web 服务器,并且实现常规的下载图片.下载文件.提交表单等功能呢? 下面要介绍的就是如何在 Android 设备上搭建一个 Web 服务器,这个 Web 服务器的功能有如下几点: 接受客户端文件上传.下载文件 动态 Http API,像 Java 的 Servlet 一样写接口 部署静态网站,例如纯Html,支持 JS.CSS.

jquery $.ajax()取xml数据的小问题解决方法

开始的代码如下: 复制代码 代码如下: $.ajax({ type: "get", url: "Database/App_all.xml", dataType: "xml", timeout: 2000, beforeSend: function () {}, success: function (xml) { $(xml).find("app[id='id-1']").find("auther").app

android layout XML解析错误的解决方法

提示: org.xmlpull.v1.XmlPullParserException: PI must not start with xml (position:unknown @1:5 in java.io.InputStreamReader@47ec2770) org.xml.sax.SAXParseException: PI must not start with xml (position:unknown xm@3:5 in java.io.InputStreamReader@43e