2016-06-14 2 views
1

Есть несколько вопросов о переходе с cUrl на Android, но ни один из них не касается загрузки файлов, которые я нашел.Конвертировать cUrl с файлом в Android HttpUrlConnection

Этот Curl запрос работает:

$ curl -X PUT -u user:password --data-binary @myfile.pdf "https://example.com/myurl?id=myid&filename=myfile.pdf&title=My+Title&mimetype=application/pdf" 

Я пытаюсь:

String url = "https://example.com/myurl?id=myid&filename=myfile.pdf&title=My+Title&mimetype=application/pdf"; 
String fileUrl = "myfile.pdf"; 
String userPassword = "user:password"; 
String userpass = Base64.encodeToString(userPassword.getBytes(), Base64.DEFAULT); 

File f = new File(fileUrl); 
    if(f.isFile()) { 
     HttpURLConnection c = null; 
     URL u = null; 
     try { 
      u = new URL(url); 
       c = (HttpURLConnection) u.openConnection(); 
      c.setRequestProperty("Authorization", "Basic " + userpass); 
      c.setDoOutput(true); 
      c.setRequestMethod("PUT"); 
      c.setRequestProperty("Content-Type", "multipart/form-data"); 

      FileInputStream fis = new FileInputStream(f); 
      long fl = f.length(); 
      output(fis, c.getOutputStream(), fl); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Где output(fis, c.getOutputStream(), fl); пишет InputStream в OutputStream, а затем закрывает/промывает оба.

Я получаю ответ method not allowed, кто-нибудь знает, что я делаю неправильно?

Edit: Это действительно странно (для меня), что их заголовки ответа имеют: Allow: POST,OPTIONS,GET,HEAD но PUT с помощью свертыванию работ.

Edit Два:

При использовании завитка я действительно получаю:

Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE 

Но при использовании HttpURLConnection, даже если установить агент пользователя для локонов агента пользователя, нет Access-Control-Allow-Methods используя c.getHeaderField(). Вместо этого поле просто Allow, и ему не хватает PUT.

ответ

0

Хорошо, это было глупо. В приведенном выше коде нет ничего плохого, но api продемонстрировал использование домена .net, который не был настроен на прием PUT. Dev отправил мне пример скручивания с использованием домена .com, когда я заметил, что все работает.

Одна из проблем заключается в том, что Android полон таких вещей, как mySecretWeirdProtocolHandler(), NastyBugNobodyCaresAbout.class и ; так что я заставляю смотреть на все сразу, не зная, что это я или они, в течение напряженного времени.

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