2

Я отправляю видеофайл и некоторые другие данные из приложения для Android на свой сервер, на котором запущено приложение для платформы Play, я использую combination из multipartEntity и Volley, чтобы отправить запрос на отправку сервер.Анализ многопользовательского запроса в структуре воспроизведения

Мне нужно, чтобы parse получил multipartEntity запрос в моем контроллере и сохранил видео в папке на сервере и отправил остальную часть данных в базу данных mySQL.

MultipartRequest:

private static final String FILE_PART_NAME = "fileKey"; 

public MultipartRequest(String url, File file, Map<String, String> mStringPart, 
           Response.Listener<String> listener, 
           Response.ErrorListener errorListener) 
    super(Method.POST, url, errorListener); 

     mListener = listener; 
     mFilePart = file; 
     this.mStringPart = mStringPart; 
     entity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
     buildMultipartEntity(); 
    } 


private void buildMultipartEntity() { 
     entity.addPart(FILE_PART_NAME, new FileBody(mFilePart)); 
     for (Map.Entry<String, String> entry : mStringPart.entrySet()) { 
      entity.addTextBody(entry.getKey(), entry.getValue()); 
     } 
    } 

@Override 
public byte[] getBody() throws AuthFailureError { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     try { 
      httpentity = entity.build(); 
      httpentity.writeTo(bos); 
     } catch (IOException e) { 
      VolleyLog.e("IOException writing to ByteArrayOutputStream"); 
     } 
     return bos.toByteArray(); 
    } 

Это мой контроллер до сих пор:

public static Result uploadFile(){ 

     RequestBody body = request().body(); 
     Http.MultipartFormData multippartBody = body.asMultipartFormData(); 

     if(multippartBody != null) { 
      return ok("Got: " + "Hi"); 
     } 
     else { 
      return badRequest("Expecting text/plain request body"); 
     } 
    } 

Я думаю, что мне нужно какое-то итератор, чтобы вытащить видео и другие данные из multippartBody, но я m unsure, как это сделать

Редактировать

Обновленный контроллер:

public static Result jsonPost(){ 

     RequestBody body = request().body(); 
     Http.MultipartFormData multippartBody = body.asMultipartFormData(); 
     Http.MultipartFormData.FilePart imageFile = body.getFile(fileKey); 
     if(multippartBody != null) { 
      return ok("Got: " + "hi"); 
     } 
     else { 
      return badRequest("Expecting text/plain request body"); 
     } 
    } 
} 

Я получаю не могу найти ошибку символа из игры на fileKey?

Edit Понял работает

public static Result jsonPost(){ 

     RequestBody body = request().body(); 
     Http.MultipartFormData multippartBody = body.asMultipartFormData(); 
     Http.MultipartFormData.FilePart imageFile = multippartBody.getFile("fileKey"); 

      if(imageFile.getFile() != null) { 
       File file = imageFile.getFile(); 
       String fileName = imageFile.getFilename(); 
       File newDir = new File("/public/images/","MyApp"); 
       if(!newDir.isDirectory()){ 
        newDir.mkdirs(); 
        System.out.println("Created dir"); 
       } 
       if(newDir.canWrite()){ 
        file.renameTo(new File(newDir, fileName)); 
       } 
       return ok("Got: " + "it"); 
      } 
      else { 
       return badRequest("Expecting text/plain request body"); 
     } 
    } 

ответ

4

Проверить тип контента в заголовки запросов, если это использование приложения/октет-поток

File file = request().body().asRaw().asFile(); 

, если он имеет тип многочастного/форма -data use

play.mvc.Http.MultipartFormData body = request().body().asMultipartFormData(); 

play.mvc.Http.MultipartFormData.FilePart imageFile = body.getFile(imageKey); 

File file = imageFile.getFile(); 
+0

Это тип multipart/form-data, я отредактировал мой вопрос чтобы показать вам конструктор моего MultipartEntityBuilder, я попытался использовать ваш код, но не увенчался успехом, не могли бы вы немного рассказать о том, как я могу использовать ваш код. – Johntk

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

  • Нет связанных вопросов^_^