This is what I used to upload a PDF, but you can use it to any file. I used the same VolleyMultipartRequest, you just have to get the data from the file to upload it. Hope it helps you!
private void uploadPDF() {
VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(
Request.Method.POST,
url,
new Response.Listener<NetworkResponse>() {
@Override
public void onResponse(NetworkResponse response) {
//Handle response
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Handle error
}
}
) {
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
//Params
return params;
}
@Override
protected Map<String, DataPart> getByteData() {
Map<String, DataPart> params = new HashMap<>();
String pdfName = String.valueOf(System.currentTimeMillis() + ".pdf");
params.put("pdf", new DataPart(pdfName, getFileData()));
return params;
}
};
//I used this because it was sending the file twice to the server
volleyMultipartRequest.setRetryPolicy(
new DefaultRetryPolicy(
0,
-1,
DefaultRetryPolicy.DEFAULT_BACKOFF_MULT
)
);
requestQueue.add(volleyMultipartRequest);
}
private byte[] getFileData() {
int size = (int) pdf.length();
byte[] bytes = new byte[size];
byte[] tmpBuff = new byte[size];
try (FileInputStream inputStream = new FileInputStream(pdf)) {
int read = inputStream.read(bytes, 0, size);
if (read < size) {
int remain = size - read;
while (remain > 0) {
read = inputStream.read(tmpBuff, 0, remain);
System.arraycopy(tmpBuff, 0, bytes, size - remain, read);
remain -= read;
}
}
} catch (IOException e) {
e.printStackTrace();
}
return bytes;
}