Hvordan kan jeg laste opp en fil i MVC seks henhold vNext?

stemmer
6

I MVC 5 Jeg pleide å gjøre dette:

var context = (HttpContextBase)Request.Properties[MS_HttpContext];
var file = (HttpPostedFileBase)context.Request.Files[0];

Nå er dette ikke tilgjengelig i MVC seks henhold vNext. Hvordan kan jeg få filen (e) fra forespørselen?

Publisert på 18/10/2014 klokken 18:47
kilden bruker
På andre språk...                            


4 svar

stemmer
8

Svaret nedenfor er om beta6 versjon.

Det er nå i rammeverket. Med noen begrensninger så langt, for å få lastet opp filnavnet du må analysere overskrifter. Og du må injisere IHostingEnvironment i kontrolleren for å få til wwwroot mappeplassering, fordi det ikke er mer Server.MapPath ()

Ta dette som eksempel:

public class SomeController : Controller
{

    private readonly IHostingEnvironment _environment;

    public SomeController(IHostingEnvironment environment)
    {       
        _environment = environment;
    }

    [HttpPost]
    public ActionResult UploadFile(IFormFile file)//, int Id, string Title)
    {

        if (file.Length > 0)
        {
            var targetDirectory = Path.Combine(_environment.WebRootPath, string.Format("Content\\Uploaded\\"));
            var fileName = GetFileName(file);
            var savePath = Path.Combine(targetDirectory, fileName);

            file.SaveAs(savePath);
            return Json(new { Status = "Ok" });
        }
        return Json(new { Status = "Error" });
    }

    private static string GetFileName(IFormFile file) => file.ContentDisposition.Split(';')
                                                                .Select(x => x.Trim())
                                                                .Where(x => x.StartsWith("filename="))
                                                                .Select(x => x.Substring(9).Trim('"'))
                                                                .First();

}
Svarte 17/08/2015 kl. 07:33
kilden bruker

Svarte 16/01/2015 kl. 08:40
kilden bruker

stemmer
6

FileUpload er ikke implementert i MVC6 ennå, ser dette problemet , og relaterte problemer som dette for status.

Du kan legge inn en XMLHttpRequest fra Javascript og fange den med noe sånt som denne koden:

public async Task<IActionResult> UploadFile()
{
    Stream bodyStream = Context.Request.Body;

    using(FileStream fileStream = File.Create(string.Format(@"C:\{0}", fileName)))
    {

        await bodyStream.CopyToAsync(fileStream);

    }

  return new HttpStatusCodeResult(200);
}

Edit: Hvis du ser problemene knyttet sammen, har de nå blitt stengt. Du kan bruke en mer normal måte å laste opp filer i MVC6 nå.

Svarte 18/10/2014 kl. 23:00
kilden bruker

stemmer
3

Den enkleste måten å laste opp en fil i ASP.NET kjerne 1.0 (MVC 6)
view (cshtml):

<form method="post" asp-action="Upload" asp-controller="Home" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="upload"/>
</form>

kontroller (cs):

[HttpPost]
public IActionResult Upload(IFormFile file)
{
    if (file == null || file.Length == 0)
        throw new Exception("file should not be null");

    // RC1
    // var originalFileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');    
    // file.SaveAs("your_file_full_address");

   // RC2
   using (var fileStream = new FileStream("path_address", FileMode.Create))
   {
       await file.CopyTo(fileStream);
   }
}
Svarte 19/06/2016 kl. 06:28
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more