Uploading a PDF to a network share drive in a .NET Core MVC application involves creating a view with a file upload form, handling the file upload in the controller, and saving the file to the network share directory. Here are the steps:
-
Create the View:
- Add a new view with a file upload form.
<!-- Views/Home/Upload.cshtml -->
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
@model UploadViewModel
<form asp-action="Upload" asp-controller="Home" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="File">Upload PDF</label>
<input type="file" class="form-control" id="File" name="File" />
</div>
<button type="submit" class="btn btn-primary">Upload</button>
</form>
@if (ViewBag.Message != null)
{
<div class="alert alert-info">
@ViewBag.Message
</div>
}
}
2. Create the View Model:
- Add a view model to handle the uploaded file.
// Models/UploadViewModel.cs
using Microsoft.AspNetCore.Http;
namespace fileUploadCoreMvc.Models
{
public class UploadViewModel
{
public IFormFile File { get; set; }
}
}
3. Create the Controller:
- In the controller, handle the file upload and save it to the network share directory.
// Controllers/HomeController.cs
using FileUploadCoreMVC2.Models;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;
using System;
using System.IO;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
namespace FileUploadCoreMVC2.Controllers
{
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
return View();
}
public IActionResult Privacy()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
[HttpGet]
public IActionResult Upload()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Upload(UploadViewModel model)
{
if (model.File != null && model.File.Length > 0)
{
try
{
string fileName = Path.GetFileName(model.File.FileName);
string networkPath = Path.Combine(_configuration["NetworkSharePath"], fileName);
using (var stream = new FileStream(networkPath, FileMode.Create))
{
await model.File.CopyToAsync(stream);
}
ViewBag.Message = "File uploaded successfully!";
}
catch (Exception ex)
{
ViewBag.Message = "Error: " + ex.Message;
}
}
else
{
ViewBag.Message = "Please select a file to upload.";
}
return View();
}
}
}
-
4. Ensure Permissions:
- Ensure that the application pool identity or the user account running the application has write permissions to the network share directory.
- Set permissions in the network share properties by adding the appropriate user and granting the necessary permissions.
5. AppSettings.json (optional):
- If you need to store the network share path or other configuration settings, you can use appsettings.json.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"NetworkSharePath": "\\\\shareDrivePath\\folder\\"
}