C# 使用C将文件上载到另一台服务器/计算机
在IIS中部署时,上载文件不起作用,但在开发模式下,它工作正常。目标文件夹位于另一台计算机中,比如说服务器本身。我关心的只是IIS部署。我发现虚拟目录上有很多相关的主题,但我不知道如何管理它。当项目部署在IIS中时,任何人都可以知道如何处理在另一台计算机中的上载。非常感谢你的帮助!谢谢C# 使用C将文件上载到另一台服务器/计算机,c#,asp.net,iis,C#,Asp.net,Iis,在IIS中部署时,上载文件不起作用,但在开发模式下,它工作正常。目标文件夹位于另一台计算机中,比如说服务器本身。我关心的只是IIS部署。我发现虚拟目录上有很多相关的主题,但我不知道如何管理它。当项目部署在IIS中时,任何人都可以知道如何处理在另一台计算机中的上载。非常感谢你的帮助!谢谢 [HttpPost] public async Task<HttpResponseMessage> Post() { if (!Request.Content.IsMimeMultipartConte
[HttpPost]
public async Task<HttpResponseMessage> Post()
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
//assuming that appsetting.isprod is set to true
var root = AppSetting.IsProd ? @"\\172.16.174.2\c$\Resources" : HttpContext.Current.Server.MapPath("~/Resources/Uploads");
if (Directory.Exists(root) == false)
{
Directory.CreateDirectory(root);
}
CustomMultipartFormDataStreamProvider provider = new CustomMultipartFormDataStreamProvider(root);
try
{
// Read all contents of multipart message into CustomMultipartFormDataStreamProvider.
var results = await Request.Content.ReadAsMultipartAsync(provider);
var data = results.FormData["model"];
IbItemModel model = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<IbItemModel>(data);
string filename = provider.FileData[0].LocalFileName;
var msg = "";
var supportedTypes = new[] { "txt", "csv" };
var fileExt = System.IO.Path.GetExtension(filename).Substring(1).ToLower();
if (!supportedTypes.Contains(fileExt))
{
msg += "File Extension Is InValid - Only Upload txt/csv File";
return Request.CreateResponse(HttpStatusCode.BadRequest, msg);
}
else
{
//success
}
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
public class CustomMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
{
public CustomMultipartFormDataStreamProvider(string path) : base(path) { }
public override string GetLocalFileName(HttpContentHeaders headers)
{
var file = headers.ContentDisposition.FileName.Replace("\"", string.Empty);
return "IB-" + Guid.NewGuid().ToString("N").Substring(0, 8) + "-" + Path.GetFileName(file);
}
}
在IIS中部署时,出现以下消息
{消息:发生错误,。例外消息:对路径“\\172.16.174.2\c$\Resources”的访问被拒绝,。例外类型:System.UnauthorizedAccessException,StackTrace:at System.IO.\u error.WinIOErrorInt32 errorCode,String maybeFullPath\r\n at System.IO.Directory.InternalCreateDirectoryString fullPath,String path,Object dirSecurityObj,BooleancheckHost\r\n位于System.IO.Directory.InternalCreateDirectoryHelperString路径,Boolean checkHost\r\n位于WebApp.Controllers.api.IbItemController
下面是一个我用来上传文件到文件夹的例子 首先,在asp.net项目中为上载的文件创建一个文件夹,这样做可以避免IIS在外部文件夹上的授权问题。在这种情况下,我在App_Data文件夹中创建了一个名为uploads的子文件夹
[HttpPost]
public ActionResult Upload(HttpPostedFileBase filebase)
{
try
{
string fileName = string.Empty;
string path;
if (filebase.ContentLength > 0)
{
fileName = Path.GetFileName(filebase.FileName);
path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
filebase.SaveAs(path);
// Do stuff with the uploaded file
}
}
catch (Exception){
// Do whatever necessary to deal with the exception
}
return RedirectToAction("Index");
}
Server.MapPath~/App_Data/uploads确保应用程序发布后获得正确的路径
PS:如果您编写一个类来处理上传的文件,您可能希望实现IDisposable来删除上传的文件或将其移动到另一个文件夹
PS2:如果出现问题,您可能希望实现日志记录。我使用上传文件不起作用是什么意思?您是如何尝试上传的?使用FileUpload控件?WebClient?是否有错误消息?异常?直到最近,所有ASP.NET应用程序都部署到IIS,所以不是IIS无法处理文件上传。我有一些问题it’代码或配置有问题,但人们猜不出可能是什么。这个问题太广泛了。没有问题描述,没有代码……普通用户没有向服务器读/写文件的权限。当用户从服务器运行应用程序时,文件会保存在不在服务器上的其他文件系统上。文件将被删除加载工作正常,但在IIS中部署程序时,出现错误:拒绝访问路径。如果要写入另一台计算机,则需要相应的权限。请参阅“重复”。堆栈溢出不是代码段共享网站。此代码适用于您的场景并不意味着它适用于OP。我们不在这里o使用特定的解决方案回答特定的问题。我的路径位于另一台服务器中。