【问题标题】:php for uploading file called, but file is not stored用于上传文件的php调用,但文件未存储
【发布时间】:2014-03-19 18:28:54
【问题描述】:

我正在尝试将 .png 文件上传到我的服务器。 php 被调用并返回,但文件从未上传。我的代码一定有问题,但我就是找不到。

Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
if(myBitmap!=null){
    pixels = new byte[myBitmap.getWidth() * myBitmap.getHeight()];
    for (int i = 0; i < myBitmap.getWidth(); ++i) {
        for (int j = 0; j < myBitmap.getHeight(); ++j) {
            pixels[i + j] = (byte) ((myBitmap.getPixel(i, j) & 0x80) >> 7);
        }
    }
}
HttpURLConnection connectionWWW = (HttpURLConnection) url.openConnection();
connectionWWW.setChunkedStreamingMode(0);//3.0
connectionWWW.setReadTimeout(100000);
String boundary =  "*****"; 
String attachmentFileName = "screenshot.png";
String crlf = "\r\n";
String twoHyphens = "--";

if(imgFile.exists()){
    connectionWWW.setUseCaches(false);//3.0
    connectionWWW.setDoOutput(true);
    connectionWWW.setDoInput(true);
    connectionWWW.setRequestMethod("POST");
    connectionWWW.setRequestProperty("Connection", "Keep-Alive");

    connectionWWW.setRequestProperty("ENCTYPE", "multipart/form-data");
    connectionWWW.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
    connectionWWW.setRequestProperty("uploaded_file", attachmentFileName);

    DataOutputStream request = new DataOutputStream(connectionWWW.getOutputStream());

    request.writeBytes(twoHyphens + boundary + crlf);

    request.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\"; filename=\"" + attachmentFileName + "\"" + crlf);
    request.writeBytes(crlf);

    request.write(pixels);

    request.writeBytes(crlf);
    request.writeBytes(twoHyphens + boundary + twoHyphens + crlf);
    request.flush();
    request.close();
}

in = new BufferedInputStream(connectionWWW.getInputStream());

String res = convertStreamToString(in);

connectionWWW.disconnect();//3.0

php:

$uploaddir = './android/';
$file = basename($_FILES['uploaded_file']['name']);
$filet = basename($_FILES['uploaded_file']['tmp_name']);
$uploadfile = $uploaddir . $file;
$rec="/android/".$file;
echo $rec;

$rec 总是回答 "./android" - $file 是空的

【问题讨论】:

  • $_FILES 中是否有任何东西
  • 我做了一个 var_dump($_FILES);显示文件 count=0 array(0) { }
  • 你没有使用move_uploaded_file()函数吗? @michaelsmith 这就是使用 PHP 上传文件的方式。另外,您在$filet$filet = basename($_FILES['uploaded_file']['tmp_name']); 中有一个t,可能就是这样。将其更改为$file = basename($_FILES['uploaded_file']['tmp_name']);

标签: php android upload


【解决方案1】:

如果您还没有使用move_uploaded_file() 函数,请尝试以下操作。

这就是使用 PHP 上传文件的方式。另外,您在$filet 中有一个t

$filet = basename($_FILES['uploaded_file']['tmp_name']);

原来如此。

看看这是否有效:

$file_path = "./android/"; // assuming running code from root

$file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {

    $uploadfile = $uploaddir . $file_path;
    $rec="/android/".$file_path;
    echo $rec;

    echo "success";
} else{
    echo "fail";
}

另外,请确保该文件夹具有适当的写入权限。

脚注:

我不确定/android/./android/ 其中一个可能需要更改才能相互反映。

【讨论】:

  • php 不是问题。可以肯定的是,我将其更改为您的建议,并尝试使用 ./android 和 /android。我还尝试使用 iPhone 版本的应用程序上传到另一个文件夹。都具有相同的结果:回声总是“失败”。问题一定出在java代码中,但是我检查了一遍又一遍,找不到问题可能是什么。我还要求我们的网络管理员检查是否没有防火墙规则阻止 android 上传文件 - 回答待定
  • 嘿迈克尔。好的,这就是我发帖询问您是否使用move_uploaded_file() 功能的原因。 @迈克尔史密斯
  • 网络管理员回答:没有防火墙问题,任何日志文件中都没有条目。
  • 在这个问题上失去的比以往任何时候都多
  • @michaelsmith:您面临多个问题... 1)您的 android 应用程序未正确上传文件(这就是为什么 var_dump($_FILES) 显示为 0)...和 ​​2)即使它正确地上传了一个文件(使用var_dump 验证),您实际上并没有保存 上传的文件到服务器。这就是 Fred 的回答发挥作用的地方,他向您展示了如何将 TEMP(“刚刚上传的”文件)移动到已知路径(您要保存文件的路径)。 TEMP 文件正是……发送到服务器的文件,但存储在临时目录中(通常)。
【解决方案2】:

最后,它表明问题出在 Java 代码中。 我用 POST 删除了部分并重新创建了它,瞧!有用。 连接参数中的某处可能有一个不可见的杂散符号,请看图。

感谢任何试图提供帮助的人。

【讨论】:

  • 好吧,总是很高兴听到找到解决方案 Michael,干杯,不客气。但是,您是使用了我在该页面上随 Java 代码提供的链接,还是使用了其他链接?
  • 我检查了那个链接。我最后做的是重新输入所有代码。如果我有更多的时间,我会做一个比较,看看有什么不同。但是下一个任务已经在召唤了……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-08
  • 2020-04-22
  • 2014-02-18
  • 2012-02-24
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多