OkHttp загрузить PDF и PNG с данными формы
У меня есть приложение, которое будет загружать файл PDF и PNG на сервер вместе с некоторыми другими данными. Я использую Stetho в качестве инспектора, но каждый раз, когда я пытаюсь открыть журнал, он зависает, а затем вылетает, поэтому я понятия не имею, правильно ли то, что я отправляю на сервер.
Вот необходимые данные (Метод: POST, Content-Type: multipart / form-data):
- Content-Disposition: form-data name = "SrcFile" Content-Type: application / pdf (PDF-файл для загрузки)
- Content-Disposition: форма-данные; name="SignFile" Content-Type: image/png (PNG-файл для загрузки)
- Mode (строковое значение)
- Req (строковое значение)
- Токен (строковое значение)
Это мой первый способ сделать это, но, исходя из моих исследований, вот мой код для загрузки указанных данных:
final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
@Override
public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) throws CertificateException {
}
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
}
};
// Install the all-trusting trust manager
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
OkHttpClient client = new OkHttpClient();
client.setSslSocketFactory(sslContext.getSocketFactory());
client.setHostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
client.networkInterceptors().add(new StethoInterceptor());
File pngFile = new File(Environment.getExternalStorageDirectory() + "signature_" + pdfFile.getFileName() + ".png");
File pdf = new File(Environment.getExternalStorageDirectory() + pdfFile.getFileName());
String mode = "SampleMode"
Headers headers = new Headers.Builder()
.add("Content-Type", "multipart/form-data")
.build();
MultipartBuilder multipartBuilder = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("Req", "SampleRequest")
.addFormDataPart("Token", "MyAPIToken")
.addFormDataPart("Mode", mode)
.addFormDataPart("SrcFile", pdf.getAbsolutePath(), RequestBody.create(MediaType.parse("application/pdf"), pdf))
.addFormDataPart("SignFile", pngFile.getAbsolutePath(), RequestBody.create(MediaType.parse("image/png"), pngFile));
RequestBody requestBody = multipartBuilder
.build();
Request request = new Request.Builder()
.url("MyURLHere")
.headers(headers)
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
Я просто хотел бы знать, правильно ли я делаю загрузку, или, возможно, я неправильно установил некоторые параметры. Опять же, я не могу использовать Stetho, потому что оно зависает всякий раз, когда я пытаюсь открыть его. Спасибо!
Отредактировано Оказывается, я только что переключил SrcFile и SignFile! XD Загрузка работает, теперь переходим к загрузке ответа.
1 ответ
Скорее предлагаю вам воспользоваться этой банкой.
Использование этой библиотеки
SyncHttpClient client = new SyncHttpClient();
RequestParams param = new RequestParams();
param.put("email", email);
param.put("title", title);
try {
if (!path.equals("") || path != null) {
param.put("logo", new File(path));
} else {
path = " ";
param.put("logo", new File(path));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String link = "your link";
client.post(link, param, new TextHttpResponseHandler() {
@Override
public void onSuccess(int arg0, Header[] arg1, String arg2) {
success1 = "true";
}
@Override
public void onFailure(int arg0, Header[] arg1, String arg2,
Throwable arg3) {
success1 = "false";
}
});