4

我正在将大型视频上传到 php 服务器,这会导致应用程序崩溃。

所以,我使用 了 conn.setChunkedStreamingMode(maxBufferSize);
但它给出了响应:请求实体太大

服务器端视频以编码形式接受,因此我使用 Base64 进行编码。

我正在使用 JSON 网络服务上传视频

    uploadvideo(&userid,&video,&title,&description,&type)

我已经搜索了很多但无法获得解决方案。谁能告诉我

http://www.coderzheaven.com/2012/03/29/uploading-audio-video-or-image-files-from-android-to-server/

http://www.mail-archive.com/android-developers@googlegroups.com/msg92856.html

哪个更好以及如何添加参数?

我使用过类似 dis 的代码

try {
    FileInputStream fileInputStream = new FileInputStream(myFile.getAbsolutePath());        //(new File(selectedPath) );
    // open a URL connection to the Servlet
    URL url = new URL(urlString);
    // Open a HTTP connection to the URL
    conn = (HttpURLConnection) url.openConnection();
    // 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");
    conn.setChunkedStreamingMode(maxBufferSize);
    conn.setRequestProperty("Connection", "Keep-Alive");
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

    dos = new DataOutputStream( conn.getOutputStream() );
    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"userid\""+ lineEnd + lineEnd);
    dos.writeBytes(strUserid+lineEnd);

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

    // read file and write it into form...
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    while (bytesRead > 0)
    {
        dos.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }
    String encodeurl = Base64.encodeBytes(buffer);

    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"video\""+ lineEnd + lineEnd);
    dos.writeBytes(encodeurl+lineEnd);

    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"title\""+ lineEnd + lineEnd);
    dos.writeBytes(strVideoName+lineEnd);

    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"description\""+ lineEnd + lineEnd);
    dos.writeBytes(strVideoComments+lineEnd);

    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"type\""+ lineEnd + lineEnd);
    dos.writeBytes(type+lineEnd);

    responseMsg = conn.getResponseMessage();
    // close streams
    System.out.println("Debug  File is written");
    fileInputStream.close();
    dos.flush();
    dos.close();
    }
    catch (MalformedURLException ex)
    {
        System.out.println(("Debug  Error: " + ex.getMessage()));
    }
    catch (IOException ioe)
    {
        System.out.println("Debug  Error: " + ioe.getMessage());
    }
    //------------------ read the SERVER RESPONSE
    try {
        inStream = new DataInputStream ( conn.getInputStream() );
        System.out.println("Input Stream :: "+inStream.toString());
        String str;

        while (( str = inStream.readLine()) != null)
        {
            System.out.println("Debug  Server Response "+str);
        }
        inStream.close();

    }
    catch (IOException ioex){
         System.out.println("Debug  Error: " + ioex.getMessage());
    }
4

2 回答 2

1

您应该将大文件分成小部分然后尝试发送。然后在服务器上加入这个小部分

于 2013-07-31T13:30:58.633 回答
0

conn.setChunkedStreamingMode(1024); 使用和 buffersize分块发送数据int maxBufferSize = 1 * 1024;

于 2015-06-11T09:42:38.833 回答