我目前正在尝试使用visual studio 2012创建文件上传网络服务。但我的代码返回“找不到路径的一部分”+我的路径。
我的路径存在100%。
这是代码:
网络服务:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Data;
using System.Web.Services.Protocols;
using System.ComponentModel;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class OGcloud : System.Web.Services.WebService
{
public OGcloud () {}
[WebMethod]
public string UploadFile(byte[] f, string fileName)
{
try
{
MemoryStream ms = new MemoryStream(f);
FileStream fs = new FileStream(System.Web.Hosting.HostingEnvironment.MapPath
("~/TransientStorage/") + fileName, FileMode.Create);
ms.WriteTo(fs);
ms.Close();
fs.Close();
fs.Dispose();
return "OK";
}
catch (Exception ex)
{
return ex.Message.ToString();
}
}
}
aspx.cs文件:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;
using System.Data;
public partial class User_MyParking : System.Web.UI.Page
{
public string msg = "";
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Form["loct"] != null)
{
byte[] f = OGcloud_Upload.FileBytes;
OGcloud.OGcloudSoapClient access = new OGcloud.OGcloudSoapClient();
msg = access.UploadFile(f, OGcloud_Upload.FileName);
}
}
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
}
aspx表单:
<table class="Casual Center" dir="rtl" style="border-spacing:10px">
<tr>
<td colspan="2"><input type="text" name="loct" id="loct" style="width:300px"/></td>
</tr>
<tr>
<td colspan="2"><textarea id="info" name="info" draggable="false" style="width:950px; height:150px; resize:none;" class="Casual"></textarea></td>
</tr>
<tr>
<td colspan="2" id="Err_info"></td>
</tr>
<tr>
<td colspan="2" runat="server">
<asp:FileUpload ID="OGcloud_Upload" runat="server" />
</td>
</tr>
</table>
任何帮助都将非常感激。
答案 0 :(得分:0)
文件上传的行为是正确的。 Web服务在客户端计算机上查看实际路径存在安全风险。您可以访问该文件的内容,因此不需要特定的路径。
这是你的代码:
FileStream fs = new FileStream(
System.Web.Hosting.HostingEnvironment.MapPath("~/TransientStorage/") +
fileName,
FileMode.Create);
这是正确的代码(假设您在文件顶部“使用System.IO”)如下:
// Make sure TransientStorage exists in your virtual folder root
string path = System.Web.Hosting.HostingEnvironment.MapPath(
@"~/TransientStorage");
string filenameOnly = Path.GetFileName(fileName);
string fullyQualifiedFill = Path.Combine(path, filenameOnly);
FileStream fs = new FileStream(fullyQualifiedFill, FileMode.Create);
请同时使用IDisposable:
using (MemoryStream ms = new MemoryStream(f))
{
using (FileStream fs = <see code above> )
{
ms.WriteTo(fs);
fs.Flush(); // may not be needed but better to be safe
fs.Close();
}
ms.Close();
}
仅供参考:知道IDisposable ......在每次C#面试时都会被问到。