9

मैं गूगल ड्राइव करने के लिए अपलोड करने के लिए सरकारी एपीआई का उपयोग करके ऐप्लिकेशन लिखा है, इस पूरी तरह से काम करता है। हालांकि मैं अपलोड को रद्द करने के लिए वैसे भी नहीं ढूंढ सकता। मैं इसे एक ASyncTask में चल रहा हूँ, अब तक मैं ड्राइव वस्तु, फ़ाइल पथ, टोकन और कुछ अन्य चर कोई भी बनाने की कोशिश की है। मैं भी टोकन रद्द करने के लिए हालांकि ऐसा लगता है कि यह केवल कैश से उसे निकाल देता है और वास्तव में यह सर्वर साइड को अमान्य नहीं है की कोशिश की है। मैंने ASyncTask पर रद्द कर दिया है, हालांकि अपलोड शुरू होने के बाद इसे रद्द कर दिया गया है, ऐसा लगता है कि इसे रोकने का कोई तरीका नहीं है।Google ड्राइव अपलोड संभव रद्द करें?

मेरी समस्या यह है कि यदि कोई उपयोगकर्ता 100 एमबी फ़ाइल अपलोड करना शुरू कर देता है तो उनके लिए इसे रद्द करने का कोई तरीका नहीं है, फिर अपने इंटरनेट कनेक्शन को चालू और बंद करना व्यावहारिक नहीं है। यह मेरा अपलोड कोड है:

java.io.File jFile = new java.io.File(path); //Does not get file just info 
       File body = setBody(jFile, mimeType); 
       try 
       { 
        java.io.File mediaFile = new java.io.File(path); 
        InputStreamContent mediaContent = 
         new InputStreamContent(mimeType, 
          new BufferedInputStream(new FileInputStream(mediaFile))); 
        mediaContent.setLength(mediaFile.length()); 
        request = drive.files().insert(body, mediaContent); 
        request.getMediaHttpUploader().setProgressListener(new CustomProgressListener()); 
        File file = request.execute(); 

निश्चित रूप से अपलोड को रद्द करने का कोई तरीका है?

उत्तर

7

महान प्रश्न! मैं एक मीडिया अपलोड अनुरोध रद्द करने की क्षमता के लिए एक सुविधा का अनुरोध दायर:

https://code.google.com/p/google-api-java-client/issues/detail?id=671

बहरहाल, यह है कि पुस्तकालय की वर्तमान डिजाइन पर आधारित लागू करने के लिए एक मुश्किल सुविधा हो सकती है।

विचार करने का एक और विकल्प AsyncTask का उपयोग नहीं करना है और इसके बजाय बहु-थ्रेडिंग को लागू करना और चल रहे थ्रेड को रोकना है। सुखद नहीं है, लेकिन अब यह करने का आपका एकमात्र विकल्प हो सकता है।

+2

मैंने थ्रेड कॉल करने का प्रयास किया है। इंटरप्ट() विधि लेकिन अपलोड जारी रखें। बहु धागे को स्वयं लागू करके आपका क्या मतलब है? – pommedeterresautee

2

एक टिप्पणी में मैं ने कहा है कि यदि किसी थ्रेड में अनुरोध डाल और कॉल बाधा काम नहीं कर रहा। तो मैं इसे करने का एक और तरीका खोज रहा था।

मैं अंत में एक, एक बदसूरत एक पाया है: अपलोड की गई फ़ाइल का InputStream बंद!

mediaContent = new InputStreamContent(NOTE_MIME_TYPE,new BufferedInputStream(new FileInputStream(fileContent))); 
mediaContent.setLength(fileContent.length()); 

और मैं एक बंद श्रोता में:

मैं के साथ प्रारंभ

IOUtils.closeQuietly(mediaContent.getInputStream()); 

यकीन के लिए यह एक बेहतर तरीके से यह करने के लिए संभव हो जाना चाहिए!

सादर

+0

क्या आपने एंड्रॉइड के साथ इसका इस्तेमाल किया था? IOUtils का पूर्ण नाम क्या है? मैं केवल com.google.api.client.util आयात कर सकता हूं। लेकिन इस वर्ग में यह विधि नहीं है। mediaContent.getInputStream()। करीबी भी काम नहीं कर रहा है। – David

+0

यह Appache IO lib का हिस्सा है। – pommedeterresautee

+0

और यह समाधान एक बदसूरत क्यों है? – David

0

मैं भी एक लंबे समय के लिए एक जवाब की तलाश में किया गया है। निम्नलिखित सबसे अच्छा है जिसके साथ मैं आ सकता हूं।

स्टोर Future वस्तु कहीं भी आप चाहते हैं (कोई Object या Void):

Future<Object> future; 

कॉल इस कोड (जावा 8):

try 
{ 
    ExecutorService executor = Executors.newSingleThreadExecutor(); 

    future = (Future<Object>) executor.submit(() -> 
    { 
     // start uploading process here 
    }); 

    future.get();   // run the thread (blocks) 
    executor.shutdown(); 
} 
catch (CancellationException | ExecutionException | InterruptedException e) 
{} 

रद्द करने के लिए कॉल करें:

future.cancel(true); 

इस समाधान ने अब तक किसी भी दुष्प्रभाव का उत्पादन नहीं किया है, संयुक्त राष्ट्र एक थ्रेड (बहिष्कृत) को रोकने की तरह, और रद्द करने की गारंटी, रद्द करने की गारंटी देता है।

+0

रद्दीकरण अपवाद पकड़े जाने के बाद भी अपलोडिंग जारी है – cdkn7

0

मुझे ऐसा करने का एक बुरा तरीका मिला है। मैं एक Android एप्लिकेशन विकसित करने रहा हूँ, लेकिन मुझे लगता है इसी तरह के तर्क अन्य प्लेटफार्मों

मैं अपलोड अनुरोध करने के लिए एक progressListener निर्धारित किया है करने के लिए आवेदन कर सकते हैं:

uploader.setProgressListener(new MediaHttpUploaderProgressListener() { 
    @Override 
    public void progressChanged(MediaHttpUploader uploader) throws IOException { 
     if (cancelUpload) { 
      //This was the only way I found to abort the download 
      throw new GoogleDriveUploadServiceCancelException("Upload canceled"); 
     } 
      reportProgress(uploader); 
    } 
}); 

आप देख सकते हैं, मैं का उपयोग किया है एक बूलियन सदस्य जो बाहर से सेट होता है जब मुझे अपलोड को रद्द करने की आवश्यकता होती है। यदि यह बूलियन सत्य पर सेट किया गया है, तो अपलोड प्रगति के अगले अपडेट पर मैं क्रैश हो जाऊंगा, जिसके परिणामस्वरूप गर्भपात हो जाएगा।

फिर से, बहुत बदसूरत, लेकिन यह एकमात्र तरीका था जिसे मैंने इसे बनाने के लिए पाया

संबंधित मुद्दे