.NET Core 2.1 Web 上传文件 关于System.IO.DirectoryNotFoundException

在ASP.NET Web开发练习中,想要完成上传文件的功能:

代码为:

View:

1<form method="post"  asp-controller="Register" asp-action="SetIcon" enctype="multipart/form-data">
2    <input name="file" type="file"  accept="image/*"/>
3    <button type="submit">提交</button>
4</form>

Action:

[HttpPost]
public IActionResult SetIcon(IFormFile file)
{
  string path=Path.Combine(Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName,
                DateTime.Now.Year.ToString(), DateTime.Now.Month.ToString(),file.FileName);

  Stream stream = new FileStream(path, FileMode.Create, FileAccess.Write);

  file.CopyTo(stream);

  Return Redirect("");}

尝试过程中在创建Stream实例时抛出异常,System.IO.DirectoryNotFoundException:"" is denie;

2017VisualStudio,项目为.NET Core 2.1,MVC

查了很多资料,做一个总结:

1、这个是解决了我的问题的:在文件夹的属性-安全中编辑,添加用户“Network Service”,并设置相应权限;期间尝试过添加“Everyone”,发现没用。

2、容易被忽略的问题:代码中FileStream在创建的时候,path应该是文件的路径,而不是目录;

3、权限管理的相关类和方法:

这一部分应该不是根源性的问题,只是因为感觉Core和Framework的这一块的区别有点大,整理一下

//FileIoPermissionFileIOPermission iOPermission = new FileIOPermission(PermissionState.Unrestricted);
iOPermission.AddPathList(FileIOPermissionAccess.AllAccess, path);
//DirectorySecurity;SetAccessControl扩展方法DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = new DirectorySecurity();
directorySecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
directoryInfo.SetAccessControl(directorySecurity);

4、其他解决异常的方法:以管理员身份运行项目以及关于程序池的用户等。

原文地址:https://www.cnblogs.com/nnnzx/p/11971203.html

时间: 2024-12-10 14:31:14

.NET Core 2.1 Web 上传文件 关于System.IO.DirectoryNotFoundException的相关文章

Web上传文件的原理及实现

现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的Commons FileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了Commons FileUpload). 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理.在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件了. 众所周知,在客户端代码中需要使用<

[转]文件上传原理:Web上传文件的原理及实现

现在有很多Web程序都有上传功能,实现上传功能的组件或框架也很多,如基于java的CommonsFileUpload.还有Struts1.x和Struts2中带的上传文件功能(实际上,Struts2在底层也使用了CommonsFileUpload).在asp.net中也有相应的上传文件的控件. 虽然现在有很多上传组件可以利用,但是了解Web上传文件的原理,对于处理突然出现的问题会有很大的帮助,下面就来讲一下通过浏览器上传文件的基本原理.在了解了原理之后,就可以非常容易地自制满足自身需要的上传组件

前端之web上传文件的方式

前端之web上传文件的方式 本节内容 web上传文件方式介绍 form上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe构造请求上传文件 1. web上传文件方式介绍 在web浏览器上传文件一般有以下几种方式: form表单上传文件 原生js实现ajax上传文件 jquery实现ajax上传文件 form+iframe上传文件 其中form提交数据之后会整个刷新页面:js通过ajax上传文件虽然不会刷新整个页面,但是他们都是通过使用formdata对

web上传文件——python

上传文件 a. Form表单上传,页面刷新(基本不用这种方式) b. Ajax方式: $(function () { $('#btn1').click(function () { var fm = new FormData(); fm.append('fffff', document.getElementById('ggggg').files[0]); fm.append('usernmae','root'); $.ajax({ url: "/ajax-upload/", type:

windows上传文件到 linux的hdfs

一.windows上传文件到 linux的hdfs 1.先在 centos 上开启 hdfs, 用 jps 可以看到下面信息, 说明完成开启 2.在win上配置 hadoop (https://www.cnblogs.com/Jomini/p/11432484.html) 后, 要在 hadoop 的 bin 文件上放以下两个文件(网上找下载), 3.创建 maven 工程, 运行读写程序 pom 文件 <dependency> <groupId>org.apache.loggin

数据采集之Web端上传文件到Hadoop HDFS

前言 最近在公司接到一个任务,是关于数据采集方面的. 需求主要有3个: 通过web端上传文件到HDFS; 通过日志采集的方式导入到HDFS; 将数据库DB的表数据导入到HDFS. 正好最近都有在这方面做知识储备.正所谓养兵千日,用兵一时啊.学习到的东西只有应用到真实的环境中才有意义不是么. 环境 这里只做模拟环境,而不是真实的线上环境,所以也很简单,如果要使用的话还需要优化优化. OS Debian 8.7 Hadoop 2.6.5 SpringBoot 1.5.1.RELEASE 说明一下,这

20151227:web:上传文件

aspx代码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="s

基于spring-boot的web应用,ckeditor上传文件图片文件

说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的配置图片文件上传功能,默认这个是没有开启的,就不用多说,ckeditor官网上也说的很清楚!http://docs.ckeditor.com 下面简单的说下配置(配置文件algoConfig.js): 1 CKEDITOR.editorConfig = function( config ) { 2

Web 在线文件管理器学习笔记与总结(19)上传文件

dir.func.php 中添加方法: /* 上传文件 */ function uploadFile($fileInfo,$path,$allowExt = array('jpg','jpeg','png','gif','txt'),$maxSize = 10487560){ //判断错误号 if($fileInfo['error'] == 0){ //文件是否是http上传上来的 if(is_uploaded_file($fileInfo['tmp_name'])){ $uniqid = md