如何在android中发送带文件的参数

时间:2012-06-22 19:30:47

标签: java php android

我在android上传图片。目前我的代码只上传文件,但我也想发送一些参数。我正在尝试关注

FileInputStream fileInputStream = new FileInputStream(sourceFile);
        URL url = new URL(upLoadServerUri);
        conn = (HttpURLConnection) url.openConnection(); // Open a HTTP  connection to  the URL
        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);

        //Sending data
        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
        dos.writeBytes(lineEnd);
        dos.writeBytes(globalUID);

在服务器端我使用的是php。这是我试图获取该参数的方式

$param = $_POST["paramName"];
target_path1 = "./places_photos/" . $param;

但是我当前的代码确实上传了文件,但它没有发送参数。如何发送参数以及如何在服务器端获取参数?

更新

目前,图像保存在places_photos变量中提到的$target_path1目录中。我想要的是将该图像保存在用户的目录中,该目录被命名为用户ID。但不幸的是,我没有在服务器端获得用户ID。如何将userid与文件一起发送到服务器?

5 个答案:

答案 0 :(得分:0)

在此之后应该添加另一个lineEnd:

dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
    dos.writeBytes(lineEnd);
    dos.writeBytes(globalUID);
    dos.writeBytes(lineEnd); <-- add this

还要确保添加多部分边界的末尾(以' - '开头的行)在您的情况下,添加以下内容:

dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

答案 1 :(得分:0)

你想&#34;制作&#34; php知道你的文件名?? 如果您的答案是肯定的,那么您可以对代码进行一些更改。

(我假设您已经创建了一个最大大小的缓冲区并读取文件并将其写入表单)

首先改变 你不需要这个来发送paramName:

//Sending data
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes("Content-Disposition: form-data; name=\"paramName\"" + lineEnd);
dos.writeBytes(lineEnd);
dos.writeBytes(globalUID);

这样做:

dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

并在你的php中,更改你的代码:

$param = $_POST["paramName"];

$param = basename( $_FILES['uploaded_file']['name']);

您可以查看this文章

答案 2 :(得分:0)

设置一个包含userid的cookie。在服务器上,您可以检索cookie并检查用户ID。 (虽然注意这不安全,也没有传递userid参数)

答案 3 :(得分:0)

您的代码有点令人困惑,请仔细检查您的变量...例如,您的target_path1前面没有$,请检查是否有任何其他服务器变量返回任何有效输出。< / p>

如果全部失败,您可以重命名正在上传的文件 - 包括文件名中的参数,并在提取参数后再次在服务器端重命名。

答案 4 :(得分:0)

这很简单...... 100%工作解决方案

使用UTF-8在url中发送参数。添加此行

git remote remove origin
git remote rename ori origin

然后在连接请求中添加第二行

 // open a URL connection to the Servlet
                FileInputStream fileInputStream = new FileInputStream(sourceFile);
                URL url = new URL("http://your fileaddress.php***?yourphpsideparametername="+URLEncoder.encode(yourperameter, "UTF-8")***  );

在PHP代码上添加此行

                conn.setRequestMethod("POST");
               ***conn.setRequestProperty("Accept-Charset", "UTF=8");***
                conn.setRequestProperty("Connection", "Keep-Alive");