首页 > 系统 > Android > 正文

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

2019-12-12 03:13:48
字体:
来源:转载
供稿:网友

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

运行结果:

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表