1

我有客户端服务器程序,客户端使用其 URL 与服务器建立连接,服务器读取文件并写入输出流,客户端将获取该文件并将其保存在目录中。问题是我没有收到服务器发送的响应文件名。这是我的客户端服务器代码。

客户,

private void receiveFile() throws IOException {
     String url11="http://localhost:8080/TestServer/TestServer";

        // creates a HTTP connection
        URL url = new URL(UPLOAD_URL);
        HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
        httpConn.setUseCaches(false);
        httpConn.setDoOutput(true);
        httpConn.setRequestMethod("POST");


        int responseCode = httpConn.getResponseCode();

        String ff=httpConn.getHeaderField("filename");
        System.out.println("FHeader :"+ff);

        File saveFile = new File(SAVE_DIR + ff);
        StringBuilder builder = new StringBuilder();
        builder.append(httpConn.getResponseCode())
               .append(" ")
               .append(httpConn.getResponseMessage())
               .append("\n");

        if (responseCode == HttpURLConnection.HTTP_OK) {
            // reads server's response

            System.out.println(builder);
            InputStream inputStream = httpConn.getInputStream();

            // opens an output stream for writing file
            FileOutputStream outputStream = new FileOutputStream(saveFile);

            byte[] buffer = new byte[BUFFER_SIZE];
            int bytesRead = -1;
            System.out.println("Receiving data...");

            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            System.out.println("Data received.");
            outputStream.close();
            inputStream.close();

        } else {
            System.out.println("Server returned non-OK code: " + responseCode);
        }


}

服务器 ,

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    int BUFF_SIZE = 1024;
    byte[] buffer = new byte[BUFF_SIZE];

    String filePath = "E:\\Docs\\Next stop is Kurki.MP3";

    File fileMp3 = new File(filePath);
    if(fileMp3.exists()){
        System.out.println("FOUND : ");
    } else {
        System.out.println("FNF");
    }
    String fNmae=fileMp3.getName();
    FileInputStream fis = new FileInputStream(fileMp3);
    response.setContentType("audio/mpeg");
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fNmae + "\"");
    response.addHeader("fName", fNmae);
    response.setContentLength((int) fileMp3.length());
    OutputStream os = response.getOutputStream();

    try {
        int byteRead = 0;
        while ((byteRead = fis.read(buffer)) != -1) {
           os.write(buffer, 0, byteRead);

        }
        os.flush();
    } catch (Exception excp) {
       // downloadComplete = "-1";
        excp.printStackTrace();
    } finally {
        os.close();
        fis.close();
    }

}

我觉得服务器端的一切都是正确的,任何人都可以帮我解决这个问题。这将是很大的帮助。谢谢你。

4

1 回答 1

1

在服务器上试试这个:

 File file = new File("E:\\Docs\\Next stop is Kurki.MP3");
            ResponseBuilder response = Response.ok((Object) file);
            response.header("Content-Disposition",
                    "attachment; filename="Next stop is Kurki.MP3");
            return response.build();

当客户端是 android 时:

wv = webView;
        wv.setDownloadListener(new DownloadListener() {
            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimetype,
                                        long contentLength) {
                String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype);
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                request.setDestinationInExternalPublicDir("/YouPath", fileName);
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
            }
        });

客户端注意这里String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype)

于 2015-04-06T05:45:11.310 回答