2017-09-10 5 views
1

J'essaye de télécharger le fichier en utilisant le retrofit, l'envoyer du côté du serveur et enregistrer ce fichier dans mon dossier de téléchargement.Fonction api web correspondante pour accepter le fichier

Ceci est mon exemple API de rénovation:

@Multipart 
@POST("file/uploaddocument") 
Call<ResponseBody> uploadFile(@Part MultipartBody.Part file); 

UploadFile:

private void uploadFile(Uri fileUri) { 
    // create upload service client 
    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

    MyApiEndpointInterface apiService = 
      retrofit.create(MyApiEndpointInterface.class); 

    // https://github.com/iPaulPro/aFileChooser/blob/master/aFileChooser/src/com/ipaulpro/afilechooser/utils/FileUtils.java 
    // use the FileUtils to get the actual file by uri 
    File file = Utils.getFileForUri(fileUri); 
    // create RequestBody instance from file 
    RequestBody requestFile = 
      RequestBody.create(
        MediaType.parse(getContentResolver().getType(fileUri)), 
        file 
      ); 

    // MultipartBody.Part is used to send also the actual file name 
    MultipartBody.Part body = 
      MultipartBody.Part.createFormData("file", file.getName(), requestFile); 

    // finally, execute the request 
    Call<ResponseBody> call = apiService.uploadFile(body); 
    call.enqueue(new Callback<ResponseBody>() { 
     @Override 
     public void onResponse(Call<ResponseBody> call, 
           Response<ResponseBody> response) { 
      UploadProgressDialog.dismiss(); 
      Log.v("Upload", "success"); 
     } 

     @Override 
     public void onFailure(Call<ResponseBody> call, Throwable t) { 
      UploadProgressDialog.dismiss(); 
      Log.e("Upload error:", t.getMessage()); 
     } 
    }); 
} 

et j'appelle cette méthode sur le bouton clic comme:

uploadFile(myfileuri); 

Ceci est mon Web Appel API (Est-ce correct? Si non, comment accepter l'image du côté client?)

<HttpPost> 
    <Route("api/File/UploadDocument", Name:="UploadDocument")> 
    Public Function Upload() As HttpResponseMessage 
     Try 
      Dim UploadedPath As String = HttpContext.Current.Server.MapPath("~/UploadedFiles") 
      Dim httpRequest = HttpContext.Current.Request 
      If httpRequest.Files.Count > 0 Then 
       For Each file As String In httpRequest.Files 

        Dim postedFile = httpRequest.Files(file) 
        postedFile.SaveAs(UploadedPath + "/") 
       Next 
      Else 

      End If 
      Dim message = Request.CreateResponse(HttpStatusCode.OK, "True") 
      Return message 
     Catch ex As Exception 
      Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex) 
     End Try 
    End Function 

Répondre

0

Voici comment je l'ai fait ... de poster ici afin que quelqu'un puisse être trouvé d'autre utile

<HttpPost, Route("api/UploadFile")> 
    Public Function Post() As HttpResponseMessage 
     Try 
      Dim httpRequest = HttpContext.Current.Request 
      If httpRequest.Files.Count < 1 Then 
       Return Request.CreateResponse(HttpStatusCode.BadRequest) 
      End If 

      For Each file As String In httpRequest.Files 
       Dim postedFile = httpRequest.Files(file) 
       Dim filePath = HttpContext.Current.Server.MapPath("~/UploadedFiles/" + postedFile.FileName) 
       ' NOTE: To store in memory use postedFile.InputStream 
       postedFile.SaveAs(filePath) 
      Next 
      Return Request.CreateResponse(HttpStatusCode.NoContent) 
     Catch ex As Exception 
      Return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex) 
     End Try 
    End Function