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