4

我正在将音频文件从我的 android 应用程序上传到服务器。上传代码在我这边运行,但不是文件没有上传到服务器上。这是我使用的代码。我还评论了上传文件的代码。这里是代码:

public void UploadFile(String path, String id) {

    HttpURLConnection connection = null;
    DataOutputStream outputStream = null;


    String pathToOurFile = "" + path;

    String urlServer = "http://txtapi.com/musicApp/uploadfile.php?fileId=" + id + "&sharedBy=" + sp.getString(CommonUtility.phone, CommonUtility.getPhoneNumber(ct));
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;

    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);
        // 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);
        outputStream.writeBytes("Content-Disposition: form-data; name=\"fileId\";filename=\"" + path + "\"" + lineEnd);
        outputStream.writeBytes(lineEnd);
        bytesAvailable = fileInputStream.available();
        // Read file
        //              bytesRead = fileInputStream.read(buffer, 0, bufferSize);//file is getting upload by this code 
        //              int i  =0;
        //              while (bytesRead > 0)
        //              {
        //              i++;
        //          
        //              outputStream.write(buffer, 0, bufferSize);                            
        //              bytesAvailable = fileInputStream.available();
        //              bufferSize = Math.min(bytesAvailable, maxBufferSize);
        //              bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        //              }

        buffer = new byte[1024];

        int bufferLength = 0;

        while ((bufferLength = fileInputStream.read(buffer)) > 0) {
            //add the data in the buffer to the file in the file output stream (the file on the sd card
            Log.i("bytes available ", "" + fileInputStream.available());
            Log.i("buffer length", "" + bufferLength);

            outputStream.write(buffer);
            //add up the size so we know how much is downloaded

        }
        outputStream.writeBytes(lineEnd);
        outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        // Responses from the server (code and message)
        fileInputStream.close();
        outputStream.flush();
        outputStream.close();

    } catch (Exception ex) {


        ex.printStackTrace();
        BugSenseHandler.setLogging(true);
        //Exception handling
        Log.i("Inside catch of  ", "Inside catch of upload ");
        BugSenseHandler.sendException(ex);
    } finally {
        System.gc();
    }
 }
4

1 回答 1

1

读取的字节数应该是写入输出流的字节数,因此将其更改为以下内容:

    while ((bufferLength = fileInputStream.read(buffer)) > 0) {
        //add the data in the buffer to the file in the file output stream (the file on the sd card
        Log.i("bytes available ", "" + fileInputStream.available());
        Log.i("buffer length", "" + bufferLength);

        outputStream.write(buffer, 0, bufferLength);
        //add up the size so we know how much is downloaded

    }
于 2013-05-02T10:45:12.700 回答