【问题标题】:Passing variables to PHP via HttpURLConnection通过 HttpURLConnection 将变量传递给 PHP
【发布时间】:2016-06-27 18:01:52
【问题描述】:

我正在使用 HTTPURLConnection 通过上传到 php 文件来将声音文件从我的应用程序上传到我的服务器。在我的 php 文件中,我将上传的音频保存到名为 uploads 的目录中。但是,我想从我的应用程序传递我的 php 文件一个变量(用户名:usernameval)以及 HTTPURLConnection,其中是我希望上传声音文件的目录的名称。我只是对如何从我的前端传递变量感到困惑。

Android 上传代码

public void uploadFile() throws IOException, ExecutionException, InterruptedException {
    new AsyncTask<Void, Void, Boolean>() {
        @Override
        protected Boolean doInBackground(Void... params) {
            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            DataInputStream inStream = null;
            String existingFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/myaudio.3gp";
            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary = "*****";
            int bytesRead, bytesAvailable, bufferSize;
            byte[] buffer;
            int maxBufferSize = 1 * 1024 * 1024;
            String urlString = "urlgoeshere";
            try {
                //------------------ CLIENT REQUEST
                FileInputStream fileInputStream = new FileInputStream(new File(existingFileName));
                // 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("Content-Type", "multipart/form-data;boundary=" + boundary);
                dos = new DataOutputStream(conn.getOutputStream());
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + existingFileName + "\"" + 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);
                // close streams
                Log.e("Debug", "File is written");
                fileInputStream.close();
                dos.flush();
                dos.close();
            } catch (MalformedURLException ex) {
                Log.e("Debug", "error: " + ex.getMessage(), ex);
            } catch (IOException ioe) {
                Log.e("Debug", "error: " + ioe.getMessage(), ioe);
            }
            //------------------ read the SERVER RESPONSE
            try {
                inStream = new DataInputStream(conn.getInputStream());
                String str;
                while ((str = inStream.readLine()) != null) {
                    Log.e("Debug", "Server Response " + str);
                }
                inStream.close();

            } catch (IOException ioex) {
                Log.e("Debug", "error: " + ioex.getMessage(), ioex);
            }
            return null;
        }
    }.execute();
}

php 文件

<?php
// Where the file is going to be placedc
echo "in php";
$username = $_POST['username'];
$target_path = "uploads/";
if (file_exists('uploads/')) {
//    mkdir('path/to/directory', 0777, true);
  echo "username is = " + $username;
}

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

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
    echo "filename: " .  basename( $_FILES['uploadedfile']['name']);
    echo "target_path: " .$target_path;
}
?>

【问题讨论】:

    标签: php android httpurlconnection


    【解决方案1】:

    public void setRequestProperty (String field, String newValue) 添加 在 API 级别 1 中设置指定请求头字段的值。 该值将仅由当前 URLConnection 实例使用。 该方法只能在连接建立之前调用。

    通过查看您的 php 文件,我假设您从帖子标题中获取了用户名。

    因此,为了获得用户名值,您需要在请求标头中进行设置:

    ...
    con.setRequestProperty("username","your_user_name");
    ...
    

    在建立连接之前。

    【讨论】:

    • 嗨,朋友。我收到 Notice: Undefined index: username in C:\xampp\htdocs\upload.php on line 4
      from the php文件
    • stackoverflow.com/a/4261200/6153485 你需要初始化变量
    猜你喜欢
    • 2013-03-05
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多