Почему он возвращает Внутреннюю ошибку сервера по httpUrlConnection?

Я занимаюсь разработкой приложения, которое может отправлять разные файлы на веб-сервер. Также я хочу отправлять большие файлы, для этого мне нужно разбить файлы на части. Но когда я отправляю файлы на сервер, ничего не загружается. Я не знаю, есть ли ошибка в том, как я отправляю файлы, и это дает ошибку 500 (внутренняя ошибка сервера) в моем ответе. Я не думаю, что проблема с сервером, потому что когда я загружаю файл, используя multiPartEntity работает, но когда я использую BufferedInputStream и DataOutputStream, он не работает. Пожалуйста, помогите мне и расскажите, что не так в моем коде, почему он не может отправлять мои файлы. Вот я так далеко:

        String samplefile = "storage/sdcard0/Pictures/Images/picture.jpg";
        File mFile = new File(samplefile);

        int mychunkSize = 2048 * 1024;
        final long size = mFile.length();
        final long chunks = size < mychunkSize? 1: (mFile.length() / mychunkSize);

        int chunkId = 0;
        try {

            BufferedInputStream stream = new BufferedInputStream(new FileInputStream(mFile));

            String lineEnd = "\r\n";
            String twoHyphens = "--";
            String boundary =  "-------------------------acebdf13572468";// random data

            for (chunkId = 0; chunkId < chunks; chunkId++) {

                 URL url = new URL(urlString);

                 // Open a HTTP connection to the URL
                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();

                 conn.setReadTimeout(20000 /* milliseconds */);
                 conn.setConnectTimeout(20000 /* milliseconds */);


                 // Allow Inputs
                 conn.setDoInput(true);
                 // Allow Outputs
                 conn.setDoOutput(true);
                 // Don't use a cached copy.
                 conn.setUseCaches(false);
                 // Use a post method.
                 conn.setRequestMethod("POST");

                 String encoded = Base64.encodeToString((_username+":"+_password).getBytes(),Base64.NO_WRAP); 
                 conn.setRequestProperty("Authorization", "Basic "+encoded); 
                 conn.setRequestProperty("Connection", "Keep-Alive");

                 conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
                 DataOutputStream dos = new DataOutputStream( conn.getOutputStream() );
                 dos.writeBytes(twoHyphens + boundary + lineEnd);

                 String param1 = ""+chunkId;
                 String param2 = ""+chunks;
                 String param3 = mFile.getName();
                 String param4 = samplefile;

              // Send parameter #file
                dos.writeBytes("Content-Disposition: form-data; name=\"fieldNameHere\";filename=\"" + param3 + "\"" + lineEnd); // filename is the Name of the File to be uploaded
                dos.writeBytes("Content-Type: image/jpeg" + lineEnd);
                dos.writeBytes(lineEnd);



                // Send parameter #chunks
                dos.writeBytes("Content-Disposition: form-data; name=\"chunk\"" + lineEnd);
                dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
                dos.writeBytes("Content-Length: " + param2.length() + lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(param2 + lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);


                // Send parameter #name
                dos.writeBytes("Content-Disposition: form-data; name=\"name\"" + lineEnd);
                dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
                dos.writeBytes("Content-Length: " + param3.length() + lineEnd);
                dos.writeBytes(lineEnd);
                dos.writeBytes(param3 + lineEnd);
                dos.writeBytes(twoHyphens + boundary + lineEnd);


                byte[] buffer = new byte[mychunkSize];

                stream.read(buffer);

                dos.write(buffer);

                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                dos.flush();
                dos.close();


            }
        } catch (Exception e) {
            Log.e("Error Uploading Files", e.toString());
        }

2 ответа

Вы можете использовать этот код. Это класс J2ME для обработки загрузки файлов через HTTP POST Multipart Requests.

Надеюсь это поможет.

Если вы предпочитаете, вы можете использовать эту библиотеку. Его очень легко реализовать и дозировать всю необходимую вам работу.

AndroidAsync

Другие вопросы по тегам