Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从asp.net c中的web服务器下载文件到客户端';s电脑_C#_Asp.net_Path_Client_Response - Fatal编程技术网

C# 从asp.net c中的web服务器下载文件到客户端';s电脑

C# 从asp.net c中的web服务器下载文件到客户端';s电脑,c#,asp.net,path,client,response,C#,Asp.net,Path,Client,Response,我正在尝试将文件从服务器下载到客户机选择的文件夹中。但我不断收到错误无法找到部分路径 例如,下载位置可以是C:/myfolder 代码: 可能不是答案,但这是您应该明确检查的: FileName = comp.DownloadLocation + "/" + "/purchase" + ".csv"; 您可能希望在购买前删除/或完全删除+“/”+,因为这将建立以下格式的路径: “somepath//purchase.csv” 很可能是你的问题。查看是否有差异。如果您需要客户端应用程序来检查We

我正在尝试将文件从服务器下载到客户机选择的文件夹中。但我不断收到错误
无法找到部分路径

例如,下载位置可以是C:/myfolder

代码:


可能不是答案,但这是您应该明确检查的:

FileName = comp.DownloadLocation + "/" + "/purchase" + ".csv";
您可能希望在购买前删除/或完全删除+“/”+,因为这将建立以下格式的路径:

“somepath//purchase.csv”


很可能是你的问题。查看是否有差异。

如果您需要客户端应用程序来检查Web API服务器,以查看服务器的文件版本是否比客户端的版本更新,您可以通过执行以下步骤来设置服务器:

将适当的方法添加到存储库界面,例如:

HttpResponseMessage GetCervezaBeberUpdate(string clientVersion);
public HttpResponseMessage GetCervezaBeberUpdate(string clientVersion)
{
    var binaryFilePath = HostingEnvironment.MapPath(@"~\App_Data\CervezaBeber.exe");
    FileVersionInfo currentVersion = FileVersionInfo.GetVersionInfo(binaryFilePath);
    if (!ServerFileIsNewer(clientVersion, currentVersion))
    {
        result = new HttpResponseMessage(HttpStatusCode.NoContent);
    }
    else
    {
        var stream = new FileStream(binaryFilePath, FileMode.Open);
        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType =
            new MediaTypeHeaderValue("application/octet-stream");
    }
    return result;
}
将其添加到相应的控制器类(其中控制器名称为“HenryFieldingController”):

将适当的方法添加到具体存储库类,例如:

HttpResponseMessage GetCervezaBeberUpdate(string clientVersion);
public HttpResponseMessage GetCervezaBeberUpdate(string clientVersion)
{
    var binaryFilePath = HostingEnvironment.MapPath(@"~\App_Data\CervezaBeber.exe");
    FileVersionInfo currentVersion = FileVersionInfo.GetVersionInfo(binaryFilePath);
    if (!ServerFileIsNewer(clientVersion, currentVersion))
    {
        result = new HttpResponseMessage(HttpStatusCode.NoContent);
    }
    else
    {
        var stream = new FileStream(binaryFilePath, FileMode.Open);
        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(stream);
        result.Content.Headers.ContentType =
            new MediaTypeHeaderValue("application/octet-stream");
    }
    return result;
}
还要在GetCervezeberUpdate()调用的存储库类中添加方法:

现在,客户端可以通过向服务器传递如下URI来调用:

http://<servername>:<portnumber>/api/
<controllername>?clientVersion=<clientversionquad>
作为免费的beer(您/我希望!)premium,以下是一些代码,客户端可以使用这些代码将服务器的响应保存到一个文件中(向其传递URI,如上图所示):


这可能会有帮助:没什么不同
http://<servername>:<portnumber>/api/
<controllername>?clientVersion=<clientversionquad>
http://Platypus:4242/api/HenryFielding?clientVersion=3.1.4.1
private void DownloadTheFile(string uri)
{
    var outputFileName = "Platypus.exe";
    var webRequest = (HttpWebRequest)WebRequest.Create(uri);
    var webResponse = (HttpWebResponse)webRequest.GetResponse();
    string statusCode = webResponse.StatusCode.ToString();
    // From here on (including the CopyStream() method) derived from Jon Skeet's 
    // answer at http://stackoverflow.com/questions/411592/how-do-i-save-a-stream-to-a-file
    if (statusCode == "NoContent")
    {
        MessageBox.Show("You already have the newest available version.");
    }
    else
    {
        var responseStream = webResponse.GetResponseStream();
        using (Stream file = File.Create(outputFileName))
        {
            CopyStream(responseStream, file);
            MessageBox.Show(string.Format("New version downloaded to {0}", outputFileName));
        }
    }
}

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[8 * 1024];
    int len;
    while ((len = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, len);
    }
}