猿问

从 Android 应用上传大型 PDF 文件时得到空白响应

我想将 PDF 文件从 android 本机应用程序上传到服务器。我检查了服务器配置,一切都很好,比如上传时间和大小。我在 base64 中转换 PDF 文件并尝试发送到服务器。服务器发送 FILE[] 的空白值(检查下面的响应)。


我尝试了另一种上传 PDF 的方法,即多部分。这也不起作用。


//Multipart code - 1st method


RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("file", new File(pdfpath).getName(),RequestBody.create(MediaType.parse("application/pdf"), new File(pdfpath).getName())).addFormDataPart("some-field", "some-value").build();

System.out.println("Multipart Data  "+requestBody.toString());


//---------------------------------------------------------

//Base64 code - 2nd method


public String converPDFBase64(File mfile) {

       ByteArrayOutputStream output=null;

       try {

           InputStream inputStream = null;

           inputStream = new FileInputStream(mfile.getAbsolutePath());

           byte[] buffer = new byte[8192];

           int bytesRead;

           output = new ByteArrayOutputStream();

           Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);

while ((bytesRead = inputStream.read(buffer)) != -1) {

               output64.write(buffer, 0, bytesRead);

           }

           output64.close();

       } catch (IOException e) {

           e.printStackTrace();

       }        return output.toString();

   }


我想使用任何方法将大型 PDF 文件发送到服务器。


aluckdog
浏览 177回答 1
1回答

慕尼黑8549860

我明白了,我正在使用 AQuery,现在我已经改变了它。现在通过 OkHttpClient 调用服务,它工作正常。public Message getMessageMedia(File file,String type) {       Message messageObj = new Message();       try {           OkHttpClient client = new OkHttpClient.Builder().connectTimeout(10, TimeUnit.SECONDS).writeTimeout(180, TimeUnit.SECONDS).readTimeout(180, TimeUnit.SECONDS).build();           RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)                   .addFormDataPart(RequestParameters.USERID, "" + SharedPreferencesMethod.getUserId(this))                   .addFormDataPart(RequestParameters.TO_USERID, "" + user.getUserId())                   .addFormDataPart(RequestParameters.MESSAGE_MEDIA,file.getName(),RequestBody.create(MediaType.parse("application/pdf"),file))                   .addFormDataPart(RequestParameters.MESSAGE_MEDIA_TYPE, "" + type)                   .addFormDataPart(RequestParameters.MESSAGE,"" +"PDF")                   .addFormDataPart("msg_identifer", System.currentTimeMillis() + "")                   .build();           Request request = new Request.Builder()                   .url(API.SEND_MESSAGE)                   .post(body)                   .build();           System.out.println("Input Data"+request.toString());           client.newCall(request).enqueue(new Callback() {               @Override               public void onFailure(final Call call, final IOException e) {                   System.out.println("PDF Faliure   "+e.toString());               }               @Override               public void onResponse(final Call call, final Response response) throws IOException {                   if (!response.isSuccessful()) {                       System.out.println("PDF Response Error   "+response.toString());                   }else{                       System.out.println("PDF Response   "+response.toString());                   }               }           });           etMessage.setText("PDF");           Date now = Calendar.getInstance().getTime();           SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm a");           messageObj.setId(REMOVE);           messageObj.setMsg_identifer(System.currentTimeMillis() + "");           messageObj.setMessageMedia(String.valueOf(file));           messageObj.setMessageMediaType(type);           messageObj.setReadStatus("0");           messageObj.setMessageAT("Sending...");           messageObj.setUserId(SharedPreferencesMethod.getUserId(getApplicationContext()));       } catch (Exception ex) {           System.out.println("Media Message Error  "+ex);       }       return messageObj;   }
随时随地看视频慕课网APP

相关分类

Java
我要回答