2016-04-16 32 views
6

Tôi đang cố gắng tải tệp lên bằng lõi aspnet bằng cách sử dụng yêu cầu ajax. Trong các phiên bản trước của .net tôi được sử dụng để xử lý này sử dụngRequest.Files trong ASP.NET CORE

foreach (string fileName in Request.Files) 
      { 
       HttpPostedFileBase file = Request.Files[fileName]; 
       //Save file content goes here 

       fName = file.FileName; 
    (...) 

nhưng bây giờ thấy nó lỗi tại request.files làm thế nào tôi có thể lấy nó để làm việc? tôi tìm kiếm và thấy rằng httppostedfile đã được thay đổi thành iformfile nhưng làm thế nào để xử lý request.files?

+1

hãy xem các liên kết này http://stackoverflow.com/questions/26443305/how-can-i-upload-a-file-in-mvc-6-under-vnext và http: // stackoverflow.com/questions/29836342/mvc-6-httppostedfilebase đặc biệt là câu trả lời này http://stackoverflow.com/a/27980038/5426333 –

+0

cảm ơn cho bình luận, tôi thực sự thấy rằng tập tin 'IFormFile trong Request.Form.Files' bây giờ tôi bị mắc kẹt khi nhận được các giá trị tham số – Ironsun

Trả lời

1

Mã này hoạt động cho 100% đối với cả hai tập tin được tải lên sử dụng hình thức thông thường hoặc ajax: Mã

[HttpPost] 
public async Task<IActionResult> Upload(IList<IFormFile> files) 
{ 
    foreach (IFormFile source in files) 
    { 
    string filename = ContentDispositionHeaderValue.Parse(source.ContentDisposition).FileName.Trim('"'); 

    filename = this.EnsureCorrectFilename(filename); 

    using (FileStream output = System.IO.File.Create(this.GetPathAndFilename(filename))) 
     await source.CopyToAsync(output); 
    } 

    return this.RedirectToAction("Index"); 
} 

private string EnsureCorrectFilename(string filename) 
{ 
    if (filename.Contains("\\")) 
    filename = filename.Substring(filename.LastIndexOf("\\") + 1); 

    return filename; 
} 

private string GetPathAndFilename(string filename) 
{ 
    return this.HostingEnvironment.WebRootPath + "\\files\\" + filename; 
} 
8

này đang làm việc từ một dự án gần đây. Dữ liệu đã được di chuyển từ Request.Files đến Request.Form.Files. Trong trường hợp bạn cần chuyển đổi luồng thành mảng byte - đây là triển khai duy nhất hoạt động cho tôi. Những người khác sẽ trả về mảng trống.

using System.IO; 
var filePath = Path.GetTempFileName(); 
foreach (var formFile in Request.Form.Files) 
{ 
    if (formFile.Length > 0) 
    { 
     using (var inputStream = new FileStream(filePath, FileMode.Create)) 
     { 
     // read file to stream 
     await formFile.CopyToAsync(inputStream); 
     // stream to byte array 
     byte[] array = new byte[inputStream.Length]; 
     inputStream.Seek(0, SeekOrigin.Begin); 
     inputStream.Read(array, 0, array.Length); 
     // get file name 
     string fName = formFile.FileName; 
     } 
    } 
} 
Các vấn đề liên quan