2012-06-22 3 views
6

Я загружаю изображение в 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; 

Но мой текущий код действительно загружает файл, но он не отправляет параметры. Как я могу отправить параметры и как их получить на стороне сервера?

Update

В настоящее время изображение сохраняется в places_photos каталоге, который упоминается в $target_path1 переменной. Я хочу сохранить это изображение в каталоге пользователя, и этот каталог называется идентификатором пользователя. Но, к сожалению, я не получаю идентификатор пользователя на стороне сервера. Как я могу отправить идентификатор пользователя на сервер вместе с файлом?

ответ

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); 
+0

Это не работает либо. Любое другое решение? – 2619

+0

Можете ли вы использовать такой инструмент, как Firebug или Wireshark, и отслеживать, что сообщение формы отправляется на сервер? Данные с несколькими частями/формами очень тонко связаны с тем, что новые линии и граница на 100% правильны. – azgolfer

0

Вы хотите «написать», чтобы узнать ваше имя файла? , если ваш ответ «да», поэтому вы можете внести некоторые изменения в свой код.

(я предполагаю, что вы создали буфер максимального размера и прочитать файл и записать его в виде)

первые изменения вам не нужно это отправить 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); 

и в РНР, изменить код:

$param = $_POST["paramName"]; 

в

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

вы можете проверить this статью

+0

Я хочу отправить параметр на сервер. Мой php уже знает имя файла. – 2619

+0

Если вы просто хотите отправить параметр на сервер, вы можете выполнить HTTP POST-запрос с HttpClient – yosafatade

0

Установите печенье с идентификатором пользователя в нем. На сервере вы можете получить cookie и проверить идентификатор пользователя. (Хотя обратите внимание, что это не безопасно и не проходит параметр userid)

+0

. Что вы упомянули, это один из вариантов, но это требование приложения - отправить параметр на сервер с загрузкой файла. :( – 2619

0

Ваш код немного запутанный, дважды проверьте свои переменные ... например, ваш target_path1 не имеет $ спереди, проверьте, не существует ли какой-либо других независимых переменных возвращает любой действительный результат.

Если все не удается, вы можете переименовать загружаемый файл - включая параметры в имя файла и снова переименовать его на стороне сервера после извлечения параметров.

0

Это очень просто ...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"; 
    } 
Смежные вопросы