Java 使用PHP脚本将文件上载到Web主机

Java 使用PHP脚本将文件上载到Web主机,java,php,android,cloud,Java,Php,Android,Cloud,我写了一个程序,该程序旨在将运动数据信息创建的文本文件上传到我用000webhost.com设置的PHP云服务器。我试过运行它,但由于某种原因它不会运行。没有上传任何传感器信息,我认为服务器端似乎存在问题。脚本或代码中是否存在错误?(或者两者都有?) 编辑:是的,我知道它并不“伟大”,我对编码还是相当陌生,并且已经尝试了一段时间(仍在努力)摆弄代码 节目 package com.example.motionsense3; import java.io.FileOutputStream; imp

我写了一个程序,该程序旨在将运动数据信息创建的文本文件上传到我用000webhost.com设置的PHP云服务器。我试过运行它,但由于某种原因它不会运行。没有上传任何传感器信息,我认为服务器端似乎存在问题。脚本或代码中是否存在错误?(或者两者都有?)

编辑:是的,我知道它并不“伟大”,我对编码还是相当陌生,并且已经尝试了一段时间(仍在努力)摆弄代码

节目

package com.example.motionsense3;

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.TimerTask;
import android.content.Context;
import android.os.Bundle;
import android.widget.Toast;
import java.net.URL;
import java.net.HttpURLConnection;
import java.io.DataOutputStream;
import java.io.File;
import android.util.Log;


public class SaveTimer extends TimerTask
{
    String upLoadServerUri = null;
    final String uploadFilePath = "/data/data/com.example.motionsense3/";
    //final String uploadFileName = "????";

    private ArrayList<String> motionData;
    private ArrayList<String> motionDataClone;
    private Context context;

    public SaveTimer(ArrayList<String> motionData, MainActivity context) {
        this.motionDataClone = (ArrayList<String>) motionData.clone();
        this.motionData = motionData;
        this.context = context;
    }

    @Override
    public void run() {
        Log.e("DIDUPLOADWORK", Boolean.toString(upload()));

    }

    private void save() {
         try {
             this.motionDataClone = (ArrayList<String>) motionData.clone();
             motionData.clear();

             FileOutputStream fileOutput = context.openFileOutput("scaninfo_" + new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss").format(new Date()).toString(), context.MODE_WORLD_READABLE);//.write(s);
             for(String s : motionDataClone)
             {
                 fileOutput.write(s.getBytes());
             }
             fileOutput.close();


         } catch (Exception e) {

         }

        //save();

}


         public boolean upload(){//ArrayList<String> motion){//String sourceFileUri) {

             /************* Php script path ****************/
             upLoadServerUri = "motionsense.uphero.com/public_html/motiondata/UploadToServer.php";

          //String fileName = sourceFileUri;

          HttpURLConnection conn = null;
          DataOutputStream dos = null;  
          String lineEnd = "\r\n";
          String twoHyphens = "--";
          String boundary = "*****";
          int bytesRead, bytesAvailable, bufferSize;
          byte[] buffer;
          int maxBufferSize = 1 * 1024 * 1024; 


               try { 

                   URL url = new URL(upLoadServerUri);
                    String fileName = "scaninfo_" + new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss").format(new Date()).toString();
                   // Open a HTTP  connection to  the URL
                   conn = (HttpURLConnection) url.openConnection(); 
                   conn.setDoInput(true); // Allow Inputs
                   conn.setDoOutput(true); // Allow Outputs
                   conn.setUseCaches(false); // Don't use a Cached Copy
                   conn.setRequestMethod("POST");
                   conn.setRequestProperty("Connection", "Keep-Alive");
                   conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                   conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                   conn.setRequestProperty("uploaded_file", fileName); 

                   dos = new DataOutputStream(conn.getOutputStream());

                   dos.writeBytes(twoHyphens + boundary + lineEnd); 
                   dos.writeBytes("Content-Disposition: form-data; name=uploaded_file; filename="
                                             + fileName + "" + lineEnd);

                   dos.writeBytes(lineEnd);


                   for(String s : motionDataClone)
                   {
                       dos.write(s.getBytes());
                   }

                   // send multipart form data necesssary after file data...
                   dos.writeBytes(lineEnd);
                   dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

                   // Responses from the server (code and message)
                   int serverResponseCode = conn.getResponseCode();
                   String serverResponseMessage = conn.getResponseMessage();
                   Log.e("SERVERRESPONSE", serverResponseMessage);
                   Log.e("SERVERRESPONSECODE", String.valueOf(serverResponseCode));

               }
               catch(Exception e){return false;}
               return true;
         }
    }
package com.example.motionsense3;
导入java.io.FileOutputStream;
导入java.io.FileInputStream;
导入java.text.simpleDataFormat;
导入java.util.ArrayList;
导入java.util.Date;
导入java.util.TimerTask;
导入android.content.Context;
导入android.os.Bundle;
导入android.widget.Toast;
导入java.net.URL;
导入java.net.HttpURLConnection;
导入java.io.DataOutputStream;
导入java.io.File;
导入android.util.Log;
公共类SaveTimer扩展TimerTask
{
字符串upLoadServerUri=null;
最后一个字符串uploadFilePath=“/data/data/com.example.motionsense3/”;
//最终字符串上传文件名=“?”;
私有ArrayList运动数据;
私有ArrayList motionDataClone;
私人语境;
公共保存计时器(ArrayList motionData,MainActivity上下文){
this.motionDataClone=(ArrayList)motionData.clone();
this.motionData=motionData;
this.context=上下文;
}
@凌驾
公开募捐{
Log.e(“DIDUPLOADWORK”,Boolean.toString(upload());
}
私有void save(){
试一试{
this.motionDataClone=(ArrayList)motionData.clone();
mootiondata.clear();
FileOutputStream fileOutput=context.openFileOutput(“扫描信息”+新简化格式(“dd_MM_yyyy_HH_MM_ss”)。格式(新日期()).toString(),context.MODE_WORLD_READABLE);/。写入;
用于(字符串s:motionDataClone)
{
fileOutput.write(s.getBytes());
}
fileOutput.close();
}捕获(例外e){
}
//save();
}
public boolean upload(){//ArrayList motion){//String sourceFileUri){
/*************Php脚本路径****************/
upLoadServerUri=“motionsense.upsero.com/public_html/motiondata/UploadToServer.php”;
//字符串fileName=sourceFileUri;
HttpURLConnection conn=null;
DataOutputStream dos=null;
字符串lineEnd=“\r\n”;
字符串双连字符=“--”;
字符串边界=“*******”;
int字节读取,字节可用,缓冲区大小;
字节[]缓冲区;
int maxBufferSize=1*1024*1024;
试试{
URL URL=新URL(upLoadServerUri);
字符串fileName=“scaninfo”+新的SimpleDataFormat(“dd_-MM_-yyyy_-HH_-MM_-ss”).格式(新日期()).toString();
//打开到URL的HTTP连接
conn=(HttpURLConnection)url.openConnection();
conn.setDoInput(true);//允许输入
conn.setDoOutput(true);//允许输出
conn.setUseCaches(false);//不要使用缓存副本
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“连接”、“保持活动”);
conn.setRequestProperty(“ENCTYPE”、“多部分/表单数据”);
conn.setRequestProperty(“内容类型”、“多部分/表单数据;边界=“+boundary”);
conn.setRequestProperty(“上传的_文件”,文件名);
dos=新的DataOutputStream(conn.getOutputStream());
写字节(两个连字符+边界+行结束);
writeBytes(“内容处置:表单数据;名称=上传的文件;文件名=”
+文件名+“”+lineEnd);
dos.writeBytes(lineEnd);
用于(字符串s:motionDataClone)
{
写入(s.getBytes());
}
//发送文件数据后所需的多部分表单数据。。。
dos.writeBytes(lineEnd);
写字节(两个连字符+边界+两个连字符+行结束);
//来自服务器的响应(代码和消息)
int serverResponseCode=conn.getResponseCode();
字符串serverResponseMessage=conn.getResponseMessage();
Log.e(“SERVERRESPONSE”,serverResponseMessage);
Log.e(“SERVERRESPONSECODE”,String.valueOf(SERVERRESPONSECODE));
}
catch(异常e){return false;}
返回true;
}
}
Php脚本

<?php

    $file_path = "motiondata/";

    $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
        echo "success";
    } else{
        echo "fail";
    }
 ?>

只要快速浏览一下代码,我相信您的问题就在这里:

upLoadServerUri = "motionsense.uphero.com/public_html/motiondata/UploadToServer.php";
基本上,您正试图通过此公共html目录连接UploadToServer.php,但是,此目录并不公开存在(当使用“/”访问网站时,您的“根”文件就是从该目录提供服务的)。更改为:

upLoadServerUri = "motionsense.uphero.com/motiondata/UploadToServer.php";

你应该会没事的(假设其他一切都正常,哈哈)。

catch(异常e){e.printStacktrace();return false;}
然后阅读logcat日志……我很确定(我的魔法球说了这一点)您的uri没有架构…但是,它也可以是NetworkOnMainThread…硬编码的uploadFilePath看起来很可疑,我们不是来这里阅读代码墙并猜测问题出在哪里的。特别是因为您甚至不必费心插入代码来检查成功/失败。您只是假设您的上载总是会发生它在php中工作,或者您的android端代码实际上正在正确上传。