因为OSS上传需要全路径,折了一天,都没有办法获取,获取的都是项目目录下面的路径,这样上传因为路径错误而传不了
于是换了一种思维,先把文件上传到服务器目录下,因为他读的都是服务器的目录,再直接把服务器的目录绝对路径带入即可
private IHostingEnvironment _hostingEnvironment;
public WinController(IHostingEnvironment environment)
{
_hostingEnvironment = environment;
}
[HttpPost("upload")]
public async Task<IActionResult> upload()
{
IFormFile iff = HttpContext.Request.Form.Files[0];//获取上传的文件
string ext = iff.FileName.Substring(iff.FileName.LastIndexOf('.'));//获取后缀
var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "file/upload");//上传到服务器的路径下面file文件夹下面一个upload文件夹下面
var filePath = Path.Combine(uploads, "1"+ ext);//因为我不需要本地备份,直接上传到OSS即可,所以这里我只要是上传的文件,都给1.xx命名,这样不占服务器空间
try
{
string msg="";
using (FileStream fs = System.IO.File.Create(filePath))
{
await iff.CopyToAsync(fs);//异步copy至服务器目录下面
fs.Flush();
}
string osspath = string.Format("{0}/{1}{2}", DateTime.Now.Year, Guid.NewGuid().ToString(), ext);//定义OSS路径
//以下上传方式不懂的可以看https://bysjdq.com/zhishi/752
bool success = OSSHelper.PutObject("xxxx", "xxx", "xxxx", "xxxx", osspath, filePath, ref msg);//此时把上传的服务器文件绝对路径带入即可filePath
msg = success ? "上传成功!" : msg;
var result = new
{
code=Convert.ToInt32(success),
success,
msg,
url = osspath
};
return Ok(result);
}
catch (Exception ex)
{
var result = new
{
code=1,
success=false,
msg=ex.Message
};
return Ok(result);
}
}
- 本文标题: OSS上传文件需要绝对路径的.NETCore的解决方案
- 文章分类:【.NET/Web】
- 非特殊说明,本文版权归【胡同里的砖头】个人博客 所有,转载请注明出处.