如何在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; 

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

更新

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

在此之后应该添加另一个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); 

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

你想“让”知道你的文件名吗? 如果您的答案是肯定的,那么您可以对代码进行一些更改。

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

首先改变你不需要这个发送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']); 

你可以查看这篇文章

您的代码有点混乱,请仔细检查您的variables…例如,您的target_path1前面没有$,检查是否有任何其他服务器variables返回任何有效输出。

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

这很简单…… 100%可行的解决方案

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

  // 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")*** ); 

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

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

在PHP代码上添加此行

  $yourperameter =$_GET['yourparameter']; $file_path = "doc/".$yourperameter."/"; $file_path = $file_path . basename( $_FILES['uploaded_file']['name']); $title =$_FILES['title']; //$descr=$file_path . basename( $_FILES['uploaded_file']['desc']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { echo "success"; } else{ echo "fail"; }