2017-09-10 1 views
1

Ich versuche, Datei mit Retrofit hochladen, senden Sie es an die Server-Seite und speichern Sie diese Datei in meinem Upload-Ordner.Entsprechende Web-API-Funktion zum Akzeptieren der Datei

Dies ist mein Retrofit API Beispiel:

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

Upload:

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

Und ich rufe diese Methode auf die Schaltfläche klicken, wie:

uploadFile(myfileuri); 

Das ist mein Web ist API-Aufruf (Ist das korrekt? Wenn nicht, um das Bild von der Client-Seite zu akzeptieren?)

<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 

Antwort

0

Dies ist, wie ich es getan ... hier Posting so, dass jemand anderes es nützlich finden könnte

<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 
Verwandte Themen