2016-06-09 3 views
0

У меня возникла проблема с загрузкой файла с использованием данных многостраничной формы. Я дал скриншот ARC с api и моим настоящим кодом. Любая помощь будет оценена по достоинству.Не удалось загрузить файл с использованием данных multipart/form

public class MultiPortRequest<T> extends Request<T> { 

    private static final String FILE_PART_NAME = "file"; 

    private MultipartEntityBuilder mBuilder = MultipartEntityBuilder.create(); 
    private final Response.Listener<String> mListener; 
    private final File mImageFile; 
    protected Map<String, String> headers; 

    public MultiPortRequest(String url,Response.Listener<String> listener, 
           ErrorListener errorListener, 

           File imageFile) 
    { 
     super(Method.POST, url, errorListener); 

     mListener = listener; 
     mImageFile = imageFile; 

     buildMultipartEntity(); 
    } 

    @Override 
    public Map<String, String> getHeaders() throws AuthFailureError { 
     Map<String, String> headers = super.getHeaders(); 

     if (headers == null 
       || headers.equals(Collections.emptyMap())) { 
      headers = new HashMap<String, String>(); 
     } 

     headers.put("Identity", "rHTYsg8vZ/KWTaGOsy0eMNhngJMiZiK60pd9jAUQ+fI="); 

     return headers; 
    } 

    private void buildMultipartEntity() 
    { 
     mBuilder.addBinaryBody(FILE_PART_NAME, mImageFile, ContentType.create("multipart/form-data"), 
       mImageFile.getName()); 

     mBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); 
     mBuilder.setLaxMode().setBoundary("xx").setCharset(Charset.forName("UTF-8")); 
    } 

    @Override 
    public String getBodyContentType() 
    { 
     String contentTypeHeader = mBuilder.build().getContentType().getValue(); 
     return contentTypeHeader; 
    } 

    @Override 
    public byte[] getBody() throws AuthFailureError 
    { 
     ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
     try 
     { 
      mBuilder.build().writeTo(bos); 
     } 
     catch (IOException e) 
     { 
      VolleyLog.e("IOException writing to ByteArrayOutputStream bos, building the multipart request."); 
     } 

     return bos.toByteArray(); 
    } 

    @Override 
    protected Response<T> parseNetworkResponse(NetworkResponse response) 
    { 
     try { 
      String result = null; 
      result = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); 
      return (Response<T>) Response.success(new JSONObject(result), HttpHeaderParser.parseCacheHeaders(response)); 
     } catch (UnsupportedEncodingException e) { 
      return Response.error(new ParseError(e)); 
     } catch (JSONException je) { 
      return Response.error(new ParseError(je)); 
     } 
    } 

    @Override 
    protected void deliverResponse(T response) 
    { 
     mListener.onResponse(response.toString()); 
     Log.v("yes", String.valueOf(mListener)); 
    } 
} 

ответ

0

Надеется, что это будет решить вашей проблеме

public String sendFileToServer(String filelocation, String targetUrl) { 
     String response = "error"; 
     Log.e("Image filename", filelocation); 
     Log.e("url", targetUrl); 
     HttpURLConnection connection = null; 
     DataOutputStream outputStream = null; 
     // DataInputStream inputStream = null; 

     String pathToOurFile = filelocation; 
     String urlServer = targetUrl; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     DateFormat df = new SimpleDateFormat("yyyy_MM_dd_HH:mm:ss"); 

     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024; 
     try { 
      FileInputStream fileInputStream = new FileInputStream(new File(
        pathToOurFile)); 

      URL url = new URL(urlServer); 
      connection = (HttpURLConnection) url.openConnection(); 

      // Allow Inputs & Outputs 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setUseCaches(false); 
      connection.setChunkedStreamingMode(1024); 
      // Enable POST method 
      connection.setRequestMethod("POST"); 

      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("Content-Type", 
        "multipart/form-data;boundary=" + boundary); 

      outputStream = new DataOutputStream(connection.getOutputStream()); 
      outputStream.writeBytes(twoHyphens + boundary + lineEnd); 

      String connstr = null; 

      String exension_withname=filelocation.substring(filelocation.lastIndexOf("/")+1); 

      Log.v("esty",exension_withname); 

      connstr = "Content-Disposition: form-data;filename=\"" + exension_withname + "\"" + lineEnd; 
      Log.i("Connstr", connstr); 

      outputStream.writeBytes(connstr); 
      outputStream.writeBytes(lineEnd); 

      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 

      // Read file 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      Log.e("Image length", bytesAvailable + ""); 
      try { 
       while (bytesRead > 0) { 
        try { 
         outputStream.write(buffer, 0, bufferSize); 
        } catch (OutOfMemoryError e) { 
         e.printStackTrace(); 
         response = "outofmemoryerror"; 
         return response; 
        } 
        bytesAvailable = fileInputStream.available(); 
        bufferSize = Math.min(bytesAvailable, maxBufferSize); 
        bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
       response = "error"; 
       return response; 
      } 
      outputStream.writeBytes(lineEnd); 
      outputStream.writeBytes(twoHyphens + boundary + twoHyphens 
        + lineEnd); 

      // Responses from the server (code and message) 
      int serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 
      Log.i("Server Response Code ", "" + serverResponseCode); 
      Log.i("Server Response Message", serverResponseMessage); 

      if (serverResponseCode == 200) { 

       StringBuilder sb = new StringBuilder(); 
       BufferedReader rd = new BufferedReader(new InputStreamReader( connection.getInputStream())); 
       String line; 
       while ((line = rd.readLine()) != null) { 
        sb.append(line); 
       } 
       Log.v("esty","output:"+sb.toString()); 
       response = "true"; 
      } 

      String CDate = null; 
      Date serverTime = new Date(connection.getDate()); 
      try { 
       CDate = df.format(serverTime); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       Log.e("Date Exception", e.getMessage() + " Parse Exception"); 
      } 
      Log.i("Server Response Time", CDate + ""); 

      filelocation = CDate 
        + filelocation.substring(filelocation.lastIndexOf("."), 
        filelocation.length()); 
      Log.i("File Name in Server : ", filelocation); 

      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
      outputStream = null; 
     } catch (Exception ex) { 
      // Exception handling 
      response = "error"; 
      Log.v("esty","Send file Exception"+ ex.getMessage() + ""); 
     ; 
     } 
     return response; 
    } 
+0

Thnx много для ур код! работает :) –

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