Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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# 使用C将文件上载到另一台服务器/计算机_C#_Asp.net_Iis - Fatal编程技术网

C# 使用C将文件上载到另一台服务器/计算机

C# 使用C将文件上载到另一台服务器/计算机,c#,asp.net,iis,C#,Asp.net,Iis,在IIS中部署时,上载文件不起作用,但在开发模式下,它工作正常。目标文件夹位于另一台计算机中,比如说服务器本身。我关心的只是IIS部署。我发现虚拟目录上有很多相关的主题,但我不知道如何管理它。当项目部署在IIS中时,任何人都可以知道如何处理在另一台计算机中的上载。非常感谢你的帮助!谢谢 [HttpPost] public async Task<HttpResponseMessage> Post() { if (!Request.Content.IsMimeMultipartConte

在IIS中部署时,上载文件不起作用,但在开发模式下,它工作正常。目标文件夹位于另一台计算机中,比如说服务器本身。我关心的只是IIS部署。我发现虚拟目录上有很多相关的主题,但我不知道如何管理它。当项目部署在IIS中时,任何人都可以知道如何处理在另一台计算机中的上载。非常感谢你的帮助!谢谢

[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使用特定的解决方案回答特定的问题。我的路径位于另一台服务器中。