使用Android将照片上传到PHP中的服务器文件夹

时间:2014-02-16 22:04:30

标签: php android json

我想在我的服务器中保存照片,但在其他文件夹中。该文件夹的结构是:

---main folder
 |
 ---uploadphoto.php
 |
 ---photos (folder)
  |
  --$email (folder)

当用户注册时,我使用权限为0777的用户名创建一个文件夹,并且该文件夹已成功创建。

当我尝试在用户文件夹中上传照片时,它不起作用,但是如果我更改保存文件的路径,则它可以正常工作。这意味着在用户文件夹之外的文件夹“photos”中。

这是我的PHP代码,用于将照片保存在文件夹中:

$email = $_POST['email'];
$ruta = "photos/". $email . basename( $_FILES['fotoUp']['name']);
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta))
    chmod ("photos/". $email . basename( $_FILES['fotoUp']['name']), 0644);

用户名通过Android传递:

List<NameValuePair> paramsu = new ArrayList<NameValuePair>();
paramsu.add(new BasicNameValuePair("email", email));
paramsu.add(new BasicNameValuePair("path", path));

JSONObject json = jsonParser.makeHttpRequest(UPLOAD_PHOTO_URL, "POST", paramsu);

如何将照片放入文件夹?我认为这是PHP语法的问题。我在Android和可变电子邮件内容中调试了正确的PHP电子邮件。

创建文件夹的方法是注册用户。

$folderemail = $_POST['email']; 
    mkdir("photos/$folderemail", 0777);
    chmod("photos/$folderemail", 0644);    

这是我的档案:

$email = "$_POST['email']";
$ruta = "photos/". $email . "/" . basename( $_FILES['fotoUp']['name']);
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta))
    chmod ($ruta . basename( $_FILES['fotoUp']['name']), 0644);

我也试过了:

$email = "$_POST['email']";
$ruta = "photos/$email/" . basename( $_FILES['fotoUp']['name']);
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta))
    chmod ($ruta . basename( $_FILES['fotoUp']['name']), 0644);

和此:

//$email = "$_POST['email']";
$ruta = "photos/1234/" . basename( $_FILES['fotoUp']['name']);
if(move_uploaded_file($_FILES['fotoUp']['tmp_name'], $ruta))
    chmod ($ruta . basename( $_FILES['fotoUp']['name']), 0644);

这很好用,但是当我把变量$ email用同名的名字不起作用时。

申请的部分内容如下:

List<NameValuePair> paramsu = new ArrayList<NameValuePair>();
paramsu.add(new BasicNameValuePair("email", email));
paramsu.add(new BasicNameValuePair("path", filename));

Log.d("request!", "starting");

JSONObject json = jsonParser.makeHttpRequest(
     UPLOAD_PHOTO_URL, "POST", paramsu);

Log.i("tag", email);//DEBUG (Email that upload the photo)

Log.i返回正确的电子邮件测试“1234”。

当我在服务器中创建电子邮件文件夹时,在php中使用此命令:

$folderemail = $_POST['email']; 
mkdir("photos/$folderemail", 0777);

2 个答案:

答案 0 :(得分:0)

变化:

$ruta = "photos/". $email . basename( $_FILES['fotoUp']['name']);

$ruta = "photos/$email/".basename( $_FILES['fotoUp']['name']);

答案 1 :(得分:0)

似乎用户名“$ email”和文件名之间缺少斜线。所以你基本上就像这样存储它:

$email = "john@apple.com";

然后

$ruta = "/photos/john@apple.comfoto1.jpeg";

添加。“/”。在ruta变量中的$ email之后将会像这样:

$ruta = "photos/". $email . "/" . basename( $_FILES['fotoUp']['name']);

P.S。尽量避免使用CHMOD 0777,这会造成严重的安全漏洞。尝试使用644(使用PHP作为与虚拟主机UID相同的用户运行)