2013-04-04 2 views
2

Я пытаюсь загрузить изображение на сервер с помощью Multipart/form-data, я должен отправить текст и изображение в один и тот же вызов. когда я отправляю только сырые данные, он работает нормально, но когда я добавляю «часть загрузки изображения», он не работает. Ниже мой код.Не удалось загрузить фотографию с использованием Content-Disposition в android

public String upLoadPostMethod(List<NameValuePair> params, boolean isUploadingPhoto) { 
      NameValuePair nvp = params.get(1); 
      String args = nvp.getValue(); 
      System.out.println(args); 
      String lineEnd = "\r\n"; 
      String twoHyphens = "--"; 
      String boundary = "********"; 
      HttpsURLConnection conn; 
      String response = ""; 
      int bytesRead, bytesAvailable, bufferSize; 
      byte[] buffer; 
      int maxBufferSize = 1*1024*1024; 
      String mimeType = "image/jpeg"; 

      try { 
       URL url = new URL(webServiceUrl); 
       conn = (HttpsURLConnection) url.openConnection(); 

       conn.setDoInput(true); 
       conn.setDoOutput(true); 
       //conn.setChunkedStreamingMode(0); 
       // Use a post method. 
       conn.setRequestMethod("POST"); 
       conn.setRequestProperty("Connection", "Keep-Alive"); 
       conn.setRequestProperty("Cookie", 
         appStatus.getSharedStringValue(appStatus.AUTH_KEY)); 
       System.out.println(appStatus 
         .getSharedStringValue(appStatus.AUTH_KEY)); 
       conn.setRequestProperty("Content-Type", 
         "multipart/form-data; boundary=" + boundary); 

       DataOutputStream dos; 
       dos = new DataOutputStream(conn.getOutputStream()); 

       // Send parameter #1 
       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name=\"cmd\"" 
         + lineEnd + lineEnd); 
       dos.writeBytes("tsql" + lineEnd); 
       // Send parameter #2 
       dos.writeBytes(twoHyphens + boundary + lineEnd); 
       dos.writeBytes("Content-Disposition: form-data; name=\"args\"" 
         + lineEnd + lineEnd); 
       dos.writeBytes(args + lineEnd); 
       System.out.println("args======" + args); 
       if(isUploadingPhoto){ 

        dos.writeBytes(twoHyphens + boundary + lineEnd); 
        dos.writeBytes("Content-Disposition: form-data; name=\"file\";" 
+"filename=\" 20130125_155208.jpg\"" +"Content-Type: "+mimeType +lineEnd+lineEnd); 

         FileInputStream fileInputStream = new FileInputStream(Environment.getExternalStorageDirectory().getPath() 
+"/20130125_155208.jpg"); 

        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); 
        } 

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

        fileInputStream.close(); 
       }else { 
        dos.writeBytes(lineEnd); 
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 
       } 

       dos.flush(); 
       dos.close(); 

       Scanner inStream = new Scanner(conn.getInputStream()); 
       while (inStream.hasNextLine()) 
        response += (inStream.nextLine()); 

       System.out.println(response); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return response; 
     } 

Есть ли что-нибудь, что я делаю неправильно здесь?

ответ

0

Я думаю, вы должны положить encType="multipart/form-data" в вашем <form> тег в виде страницы: Смотрите пример кода ниже, я надеюсь, что это поможет вам:

Как я использую Struts 1.3.8 и у меня есть пользователь страница регистрации в JSP, где пользователь должен загрузить изображение вместе с некоторой текстовой информации, например, имя, адрес и т.д. ....

<html:form action="/register?s=r" method="Post" enctype="multipart/form-data" onsubmit="return validateFob(this)"> 

    <table width="65%" border="0" height="65%" bgcolor="beige"> 




..... 
............ 
    </table> 

+0

Мой апи работает нормально, но есть какая-то проблема с загрузкой изображений часть, которую я не в состоянии понять. – abhishek

+0

какой тип проблемы? Не могли бы вы предоставить дополнительную информацию? Или это похоже на то, что вы получаете какое-то исключение или что-то еще? Код, который вы указали выше, в порядке, как я думаю. –

Смежные вопросы