如何将 ASP.NET Core Web API 中接收的文件保存到具有特定凭据的文件服务器

问题描述 投票:0回答:1

我有一个名为

MySERVER
的服务器,其共享名为
TPLFOTOS
。我有另一台服务器正在运行 ASP.NET Core Web API,该服务器接收图像并必须将其保存到
\\MySERVER\MySavedFiles

图像发送正确,网络服务接收正常,当它尝试保存它时,出现以下错误:

写入文件时出错 访问路径“\MySERVER\MySavedFiles�[email protected]”被拒绝。

我需要告诉应该使用哪个用户连接到共享资源并将文件保存在该用户下,或者我应该如何执行此操作?

这就是我尝试将接收到的文件写入远程文件服务器的方式:

private async Task WriteFile(IFormFile file)
{   
    string fileName;
    string pathUploads;

    try
    {
        fileName = file.FileName;
        pathUploads = @"\\MySERVER\MySavedFiles\20231101";
    
        var pathFile = Path.Combine(pathUploads, fileName);  

        using (var stream = new FileStream(pathFile, FileMode.Create))
        {
            await file.CopyToAsync(stream);
        }
    }
    catch (Exception e)
    {
        throw new Exception("Error al escribir archivo " + e.Message);
        //log error
    }

    return;
}
c# asp.net-core-webapi
1个回答
-2
投票

要将 ASP.NET Core Web API 中收到的文件保存到具有特定凭据的文件服务器,您可以按照以下常规步骤操作:

在 ASP.NET Core Web API 控制器端点中接收文件。 使用特定凭据对访问文件服务器的请求进行身份验证和授权。 使用 SMB(服务器消息块)或 FTP(文件传输协议)等安全协议将文件传输到文件服务器。 处理文件传输过程中可能出现的任何错误或异常。

请参考这个例子

using Microsoft.AspNetCore.Mvc;
using System;
using System.IO;
using System.Net;

namespace YourNamespace.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class FileController : ControllerBase
    {
        private readonly string fileServerPath = "file_server_path"; // Replace with your file server path
        private readonly NetworkCredential credentials = new NetworkCredential("username", "password", "domain"); // Replace with your credentials

        [HttpPost("upload")]
        public IActionResult UploadFile()
        {
            try
            {
                var file = Request.Form.Files[0];
                if (file != null && file.Length > 0)
                {
                    using (var stream = new MemoryStream())
                    {
                        file.CopyTo(stream);

                        // Transfer file to file server
                        using (var fileStream = new FileStream(fileServerPath + file.FileName, FileMode.Create))
                        {
                            stream.Seek(0, SeekOrigin.Begin);
                            stream.CopyTo(fileStream);
                        }

                        return Ok("File uploaded successfully");
                    }
                }
                else
                {
                    return BadRequest("No file received");
                }
            }
            catch (Exception ex)
            {
                return StatusCode(500, $"Internal server error: {ex}");
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.