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);
}
}