2016-08-05 27 views
5

Tôi đang cố gắng phân phối tệp từ thư mục hình ảnh của tôi bên trong thư mục wwwroot của ứng dụng ASP.NET Core của tôi nơi tôi đã bật quyền truy cập tệp tĩnh trong lớp Startup.Chuyển đổi đường dẫn tệp tuyệt đối thành tương đối

Dịch vụ HostingEnvironment cung cấp cho tôi thuộc tính WebRootPath cung cấp cho tôi đường dẫn tuyệt đối tới thư mục wwwroot nhưng sử dụng đường dẫn này cung cấp cho tôi lỗi "Không được phép tải tài nguyên cục bộ" trong bảng điều khiển của trình duyệt.

Nếu tôi truy cập tệp từ trình duyệt của mình bằng cách sử dụng localhost + đường dẫn tương đối, tôi có thể tải tệp hình ảnh để không có vấn đề gì về ủy quyền.

Tất cả những gì tôi cần bây giờ là có thể chuyển đổi đường dẫn tuyệt đối đó thành đường dẫn tương đối thành máy chủ web của tôi.

+0

Xin vui lòng, không thứ thẻ vào tiêu đề câu hỏi! – Tseng

Trả lời

4

Với lỗi bạn đang nhận được, có vẻ như với tôi rằng bạn đang cố gắng sử dụng _env.WebRootPath + "/images/textfile.txt" trong chế độ xem của mình, ví dụ như thuộc tính href.

  • Làm điều đó sẽ kết thúc trong trình duyệt tìm cách yêu cầu từ trang của bạn url giống như file:///C:/Users/PathToYourSite/wwwroot/images/textfile.txt, kết thúc do lỗi bạn đang gặp phải. Bạn có thể đọc thêm về điều đó on this answer, nhưng trong các trình duyệt như Chrome moder, các yêu cầu từ giao thức http đến giao thức tệp bị tắt theo mặc định.

Vì vậy, cách tiếp cận IHostingEnvironment nên được sử dụng khi bạn muốn đọc nội dung của tệp như một phần của logic phía máy chủ, để bạn có thể làm điều gì đó với chúng.

Tuy nhiên nếu những gì bạn cần là để tạo ra các liên kết đến các tập tin của bạn trong wwwroot và sử dụng chúng trong quan điểm của bạn, bạn có một vài lựa chọn:

  • Sử dụng IUrlHelper để giải quyết url nào để một bên trong wwwroot, trong đó "~/" là thư mục wwwroot. Sau đó sử dụng nó bất cứ khi nào bạn cần đến nó, giống như một href:

    @Url.Content("~/images/textfile.txt") 
    
  • Trực tiếp tạo ra một neo trong một cái nhìn dao cạo với một thuộc tính href bắt đầu với "~/". (Bạn thậm chí nhận được IntelliSense có)

    <a href="~/images/textfile.txt">Get file from wwwroot</a> 
    
3

Để truy cập tập tin trong wwwroot, Chích IHostingEnvironment vào bạn bộ điều khiển constructor:

private IHostingEnvironment _env; 

     public HomeController(IHostingEnvironment env) 
     { 
      _env = env; 
     } 

Cập nhật điều khiển của bạn để đọc WebRootPath tài sản và nối đường dẫn tập tin tương ứng với nó

var content = System.IO.File.ReadAllText(_env.WebRootPath + "/images/textfile.txt"); 

Điều này sẽ đọc tất cả nội dung của tệp nằm bên trong /wwwroot/images/textfile.txt

Hy vọng rằng sẽ giúp

Các vấn đề liên quan