简体   繁体   中英

PHP can not find files in windows

I have build a server use PHP based on WAMP Server on my windows 10 computer. what I want to do is when I send a GET request, the show_files.php should return a JSON object to me. The JSON object contains file names in path F:\\NetEaseMusic\\download on my computer. Then I use a file name to send a POST request to download_file.php and it returns a data stream so that I can download file. When I use HttpURLConnection , everything works well. However, when I try send the POST request use socket, download_file.php can get the file_name param, but it can not find the target file in F:\\NetEaseMusic\\download . I show the code. this is

this is download_file.php

<?php
if(empty($_POST["file_name"]))
{
    echo "NO_FILE_NAME\n";
    print_r($_POST);
    exit();
}
$path = iconv("utf-8", "GB2312","F:\\NetEaseMusic\\download\\".$_POST["file_name"]);
//$path = "F:\\NetEaseMusic\\download\\".$_POST["file_name"];
if (!file_exists ( $path )) {
    echo "FILE_NOT_FOUND\n";
    echo "F:\\NetEaseMusic\\download\\".$_POST["file_name"]."\n";
    print($path);
    exit ();
}
$file_size = filesize($path);
//header("Content-type: application/octet-stream");
//header("Accept-Ranges: bytes");
//header("Accept-Length:".$file_size);
//header("Content-Disposition: attachment; filename=".$path);
$file = fopen($path, "r");
while(!feof($file))
{
    echo fread($file, 1024);
}
exit();
?>

this is my Client code which to download file. First of all I build a HTTP POST request,

private void downloadFileBySocket(String urlString, String fileName)
{

    try{
        StringBuilder sb = new StringBuilder();
        String data = URLEncoder.encode("file_name", "utf-8") + "=" +  URLEncoder.encode(fileName, "utf-8") + "\r\n";
        //String data = "&file_name="+fileName;
        sb.append("POST " + urlString + " HTTP/1.1\r\n");
        sb.append("Host: 10.206.68.242\r\n");
        sb.append("Content-Type: application/x-www-form-urlencoded\r\n");
        sb.append("Content-Length: " + data.length() + "\r\n");
        sb.append("\r\n");
        sb.append(data + "\r\n");

        //sb.append( URLEncoder.encode("file_name", "utf-8") + "=" +  URLEncoder.encode(fileName, "utf-8") + "\r\n");

        System.out.println(sb.toString());

        URL url = new URL(urlString);
        Socket socket = new Socket(url.getHost(), url.getPort());
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
        writer.write(sb.toString());
        writer.flush();


        File file = new File("./" + fileName);
        DataOutputStream out = null;
        DataInputStream in = null;
        try{
            out = new DataOutputStream(new FileOutputStream(file));
            in = new DataInputStream(socket.getInputStream());
            byte[] buffer = new byte[1024];
            int readBytes = 0;
            while((readBytes = in.read(buffer)) != -1)
            {
                out.write(buffer, 0, readBytes);
            }
            out.flush();
        }catch (Exception e1)
        {
            e1.printStackTrace();
        }finally {
            try{
                if(in != null)
                {
                    in.close();
                }
                if(out != null)
                {
                    out.close();
                }
            }catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
        socket.close();

    }catch (Exception e)
    {
        e.printStackTrace();
    }

}

and my main[] method

public static void main(String[] args)
{
    SocketTest socketTest = new SocketTest();
    socketTest.downloadFileBySocket(SocketTest.downloadFileUrl, "小胡仙儿 - 【二胡】霜雪千年.mp3");
}

Simple way:

using System.Net;
WebClient webClient = new WebClient();
webClient.DownloadFile("example.com/myfile.txt", @"c:/myfile.txt");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM