下载错误,无法打开文件

时间:2015-06-19 08:09:15

标签: android download google-drive-android-api

我的应用必须连接到谷歌硬盘。连接工作正常。 我可以看到驱动器中的所有文件。下载文件工作正常。 不幸的是,当我尝试打开它时,文件已损坏,或者根本无法打开它们。有谁知道这个问题的解决方案??

enter code here

URL url = new URL(fileURL);

HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
int responseCode = httpConn.getResponseCode();

// always check HTTP response code first
if (responseCode == HttpURLConnection.HTTP_OK) {
    String fileName = "";
    String disposition = httpConn.getHeaderField("Content-Disposition");
    String contentType = httpConn.getContentType();
    int contentLength = httpConn.getContentLength();

    if (disposition != null) {
        // extracts file name from header field
        int index = disposition.indexOf("filename=");
        if (index > 0) {
            fileName = disposition.substring(index + 10,
                    disposition.length() - 1);
        }
    } else {
        // extracts file name from URL
        fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1,
                fileURL.length());
    }
    System.out.println("Content-Type = " + contentType);
    System.out.println("Content-Disposition = " + disposition);
    System.out.println("Content-Length = " + contentLength);
    System.out.println("fileName = " + fileName);
    fileName = mr.getTitle();
    // opens input stream from the HTTP connection
    // URLConnection connection = url.openConnection();
    String saveFilePath = saveDir + File.separator + fileName;

     InputStream inputStream = httpConn.getInputStream();
     FileOutputStream outputStream = new
     FileOutputStream(saveFilePath);
    // opens an output stream to save into file



    int bytesRead = 0;
    // int read;
    byte[] buffer = new byte[16384];
    // while ((bytesRead = inputStream.read(buffer)) > 0) {
    // outputStream.write(buffer, 0, bytesRead);
    // }
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

     outputStream.flush();  
     outputStream.close();
     inputStream.close();

    System.out.println("File downloaded");
} else {
    System.out
            .println("No file to download. Server replied HTTP code: "
                    + responseCode);
}
httpConn.disconnect();

1 个答案:

答案 0 :(得分:0)

文件长度和字节缓冲区之间存在问题。如需快速,请更改并重试

byte[] buffer = new byte[1024];

或者您可以获得输入流的长度,然后创建缓冲区

long streamLength = inputStream.available();
byte[] buffer = new byte[streamLength];

玩得开心!