2017-08-03 8 views
7

मैं एंड्रॉइड विकास के लिए पूरी तरह से नया हूं और मैं एंड्रॉइड में प्रेजिपीप्लॉकनेक्शन के माध्यम से एक बड़ी फाइल भेज रहा हूं। कोड मैं httpurlconnection के माध्यम से फ़ाइलों को अपलोड करने के लिए इस्तेमाल कियाबटन पर एंड्रॉइड में एक Httpurlconnection को रोकने के लिए कैसे करें

try { 
      FileInputStream fileInputStream = new FileInputStream(new File(
        pathToOurFile)); 

      URL url = new URL(urlServer); 
      connection = (HttpURLConnection) url.openConnection(); 

      // Allow Inputs & Outputs 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setUseCaches(false); 
      connection.setChunkedStreamingMode(1024) 

      // Enable POST method 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("Content-Type", 
        "multipart/form-data; boundary=" + boundary); 

      outputStream = new DataOutputStream(connection.getOutputStream()); 
      outputStream.writeBytes(twoHyphens + boundary + lineEnd); 


      // TOKENID 
      String token = "anyvalye"; 
      outputStream.writeBytes("Content-Disposition: form-data; name=\"Token\"" + lineEnd); 
      outputStream.writeBytes("Content-Type: text/plain;charset=UTF-8" + lineEnd); 
      outputStream.writeBytes("Content-Length: " + token.length() + lineEnd); 
      outputStream.writeBytes(lineEnd); 
      outputStream.writeBytes(token + lineEnd); 
      outputStream.writeBytes(twoHyphens + boundary + lineEnd); 

      String connstr = null; 
      connstr = "Content-Disposition: form-data; name=\"UploadFile\";filename=\"" 
        + pathToOurFile + "\"" + lineEnd; 

      outputStream.writeBytes(connstr); 
      outputStream.writeBytes(lineEnd); 

      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      TotalFileSize=bufferSize; 

      System.out.println("Initial Max Size" + bytesAvailable + ""); 
      buffer = new byte[bufferSize]; 

      // Read file 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      try { 
       while (bytesRead > 0) { 
        try { 
         outputStream.write(buffer, 0, bufferSize); 
        } catch (OutOfMemoryError e) { 
         e.printStackTrace(); 
         response = "outofmemoryerror"; 
         return response; 
        } 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       response = "error"; 
       return response; 
      } 
      outputStream.writeBytes(lineEnd); 
      outputStream.writeBytes(twoHyphens + boundary + twoHyphens 
        + lineEnd); 

      // Responses from the server (code and message) 
      int serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 
      System.out.println("Server Response Code " + " " + serverResponseCode); 
      System.out.println("Server Response Message "+ serverResponseMessage); 

      if (serverResponseCode == 200) { 
       response = "true"; 
      }else 
      { 
       response = "false"; 
      } 

      fileInputStream.close(); 
      outputStream.flush(); 

      connection.getInputStream(); 
      //for android InputStream is = connection.getInputStream(); 
      java.io.InputStream is = connection.getInputStream(); 

      int ch; 
      StringBuffer b = new StringBuffer(); 
      while((ch = is.read()) != -1){ 
       b.append((char)ch); 
      } 

      String responseString = b.toString(); 
      System.out.println("response string is" + responseString); //Here is the actual output 

      outputStream.close(); 
      outputStream = null; 

     } catch (Exception ex) { 
      // Exception handling 
      response = "error"; 
      System.out.println("Send file Exception" + ex.getMessage() + ""); 
      ex.printStackTrace(); 
     } 
     return response; 
    } 

मुझे पता है कि फ़ाइलों को डाउनलोड के दौरान, हम रोक सकते हैं और फिर से शुरू कर सकते हैं डाउनलोड और उपलब्ध कोड का एक बहुत देखते हैं आया है। मैंने कोडों की कोशिश की और समाधान भी मिला।

लेकिन क्या मैं Httpurlconnection में अपलोड प्रक्रिया को रोक और फिर से शुरू कर सकता हूं। मुझे माफ़ कर दो अगर मेरा सवाल मूर्खतापूर्ण है क्योंकि मैं इस अवधारणाओं को सीख रहा हूं। क्या कोई मुझे अपलोड को रोकने और फिर से शुरू करने के लिए यहां मेरी सहायता कर सकता है क्योंकि मेरे ज्ञान तक कोई कोड उपलब्ध नहीं है।

डिबगिंग के बाद, मैं कोड के इस टुकड़े पर फाइल अपलोड यहाँ के आकार के लिए प्रतिक्रिया हो रही है,

bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      try { 
       while (bytesRead > 0) { 
        try { 
         outputStream.write(buffer, 0, bufferSize); 
        } catch (OutOfMemoryError e) { 
         e.printStackTrace(); 
         response = "outofmemoryerror"; 
         return response; 
        } 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       response = "error"; 
       return response; 
} 
     } 

अपने आप को अद्यतन करने के लिए कुछ मदद मिल की उम्मीद।

+0

स्ट्रीम रोकें/फिर से शुरू करें दो श्रेणियों की 'रेंज' हेडर फ़ील्ड को संभालने की क्षमता द्वारा दी गई सुविधा है। यदि प्रेषक (इसे सर्वर या क्लाइंट बनाते हैं) सामग्री के प्रेषण भाग को संभालने में सक्षम है और रिसीवर पुनर्निर्माण को संभालने में सक्षम है, तो इसे काफी समान काम करना चाहिए। [यहां यह कैसे काम करता है पर एक विस्तार] (https://superuser.com/questions/641950/how-do-pause-able-downloads-work)। आंशिक अपलोड को संभालने के लिए आपको सर्वर को भी अनुकूलित करना होगा, मुझे नहीं लगता कि यह अपने आप डाउनलोड कर सकता है। – bracco23

+0

@ bracco23 urlconnection.setChunkedStreamingMode (1024) है जो फ़ाइल को क्लाइंट साइड से सर्वर पर भेजने के लिए पर्याप्त है? –

+0

यह शायद कोड का हिस्सा होगा, लेकिन आपको पहले यह सुनिश्चित करना होगा कि आपका सर्वर भाग में भेजी गई फ़ाइल को संभालने में सक्षम है। इसके अलावा आपको भेजे गए हिस्से की गिनती रखने के लिए और फिर से शुरू करने में सक्षम होने के लिए भेजना होगा। – bracco23

उत्तर

0
``` 
bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      try { 
       while (bytesRead > 0) { 
        try { 
         outputStream.write(buffer, 0, bufferSize); 
        } catch (OutOfMemoryError e) { 
         e.printStackTrace(); 
         response = "outofmemoryerror"; 
         return response; 
        } 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       response = "error"; 
       return response; 
} 
     } 
    ``` 
संबंधित मुद्दे