微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php-Android文件上传-$_FILES返回空

我正在尝试使用Android脚本将图像从Android App上传到服务器.
HTTP响应返回状态为OK:200,但是$_FILES [“ upfile”] [“ name”]返回空.
我已经检查了我的文件夹权限,Aready是777.

我的.java类

  /********************UPLOAD DATA*************************************/
class UploadImg extends AsyncTask<Void, Void, Void>{

    NetworkInfo net;

    Messaging uActivity;

    HttpURLConnection connection = null;
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;

    String folderPath;
    String arrayOfFiles[];
    File root;
    File allFiles;

    String urlServer = "http://bmcpublicidade.com.br/chat/upload.PHP";
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary =  "*****";

    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 10*1024*1024;

    URL url;

     ProgressDialog pDialog = new ProgressDialog(Messaging.this);



    @Override
    protected void onPreExecute() {


        Log.d(" UploadImg","onPreRequest");

            pDialog.setMessage("Uploading GPS Data. Please wait...");
            pDialog.setIndeterminate(false);
            pDialog.setCancelable(true);
            pDialog.show();


    }

    @Override
    protected Void doInBackground(Void... params) {

         Log.d(" UploadData","doInBackground");

         String fileName = ""+selectedpath;
         HttpURLConnection conn = null;
         DataOutputStream dos = null;
         BufferedReader inStream = null;
         String lineEnd = "rn";
         String twoHyphens = "--";
         String boundary =  "*****";
         int bytesRead, bytesAvailable, bufferSize;
         byte[] buffer;
         int maxBufferSize = 10*1024*1024;
         String responseFromServer = "";
         String urlString = "http://bmcpublicidade.com.br/chat/upload.PHP";
         try
         {
          //------------------ CLIENT REQUEST
         FileInputStream fileInputStream = new FileInputStream(new File(selectedpath) );
          // open a URL connection to the Servlet
          URL url = new URL(urlString);
          // Open a HTTP connection to the URL
          conn = (HttpURLConnection) url.openConnection();
          // Allow Inputs
          conn.setDoInput(true);
          // Allow Outputs
          conn.setDoOutput(true);
          // Don't use a cached copy.
          conn.setUseCaches(false);
          // Use a post method.
          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("upfile", fileName); 
          dos = new DataOutputStream( conn.getoutputStream() );
          dos.writeBytes(twoHyphens + boundary + lineEnd);
          dos.writeBytes("Content-disposition: form-data; name=\"upfile\"; filename='"+ selectedpath +"'" + lineEnd);
          dos.writeBytes(lineEnd);
          // create a buffer of maximum size
          bytesAvailable = fileInputStream.available();
          bufferSize = Math.min(bytesAvailable, maxBufferSize);
          buffer = new byte[bufferSize];
          // read file and write it into form...
          bytesRead = fileInputStream.read(buffer, 0, bufferSize);
          while (bytesRead > 0)
          {
           dos.write(buffer, 0, bufferSize);
           bytesAvailable = fileInputStream.available();
           bufferSize = Math.min(bytesAvailable, maxBufferSize);
           bytesRead = fileInputStream.read(buffer, 0, bufferSize);
          }
          // send multipart form data necesssary after file data...
          dos.writeBytes(lineEnd);
          dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
       // Responses from the server (code and message)
          serverResponseCode = conn.getResponseCode();
          String serverResponseMessage = conn.getResponseMessage();

          Log.i("upfile", "HTTP Response is : "
                  + serverResponseMessage + ": " + serverResponseCode);

          if(serverResponseCode == 200){

              runOnUiThread(new Runnable() {
                   public void run() {

                       String msg = "File Upload Completed.\n\n See uploaded file here : \n\n"
                                     +" http://**********/media/uploads/";

                       messageText.setText(msg);
                       Toast.makeText(Messaging.this, "File Upload Complete.", 
                                    Toast.LENGTH_SHORT).show();
                   }
               });                
          }    

          // close streams
          Log.e("Debug","gravando arquivo: " + fileName);
          fileInputStream.close();
          dos.flush();
          dos.close();
         }
         catch (MalformedURLException ex)
         {
              Log.e("Debug", "erro: " + ex.getMessage(), ex);
         }
         catch (IOException ioe)
         {
              Log.e("Debug", "erro: " + ioe.getMessage(), ioe);
         }
         //------------------ read the SERVER RESPONSE
         try {
               inStream = new BufferedReader ( new InputStreamReader(conn.getInputStream()) );
               String str;

               while (( str = inStream.readLine()) != null)
               {
                    Log.e("Debug","Servidor diz:  "+str);
               }
               inStream.close();

         }
         catch (IOException ioex){
              Log.e("Debug", "erro: " + ioex.getMessage(), ioex);
         }


    return null;
    }

    @Override
    protected void onPostExecute(Void result) {

         Log.d(" UploadMSG","onPost");

        pDialog.dismiss();

        messageText.setText("Uploaded");
    }
}
/********************END OF UPLOAD*************************************/

这是我的PHP文件

// Where the file is going to be placed
$target_path = "uploads/";

/* Add the original filename to our target path.
Result is "/uploads/filename.extension" */
$target_path = $target_path . basename( $_FILES['upfile']['name']);

if( $_FILES['upfile'] )
{
    if(move_uploaded_file($_FILES['upfile']['tmp_name'], $target_path)) {

        // $qry = "UPDATE users set image=".$target_path." where username='$username'";
        // $db->query($qry);

        echo "O arquivo ".  basename( $_FILES['upfile']['name']).
        " está sendo enviado";
    } else{
        echo "Ocorreu um erro ao realizar envio de arquivo, por favor tente novamente!\n";
        echo "Nome do arquivo: " .  basename( $_FILES['upfile']['name'])."\n";
        echo "target_path: " .$target_path;
    }
}else
{
    echo "Nenhum arquivo careregado!"; 



    /*** ever enters here!!! ***/
}

你能帮助我吗?

谢谢 !!!

解决方法:

我刚刚遇到了同样的问题.发布文件成功,响应为200,但是_FILES为空.我通过指定Content-Length标头解决了该问题.例如.:

conn.setRequestProperty("Content-Length", Integer.toString(fileInputStream.available()));

编辑:因此,使用此文件时,该文件出现在_FILES中,但错误代码为3.但是,我也调用了conn.setChunkedStreamingMode(1024);.删除Content-Length和对setChunkedStreamingMode的调用对我来说是可行的,但是我很确定空的_FILES与Content-Length字段设置不正确有关.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐