2010-11-03 25 views
67

Nó hoạt động nếu tệp html là cục bộ (trên ổ C của tôi), nhưng không phải nếu tệp html nằm trên máy chủ và tệp hình ảnh là cục bộ. Tại sao vậy?Tại sao tôi không thể làm <img src="C:/localfile.jpg">?

Bất kỳ cách giải quyết nào có thể xảy ra?

+1

Tôi có thể hỏi tại sao bạn muốn làm một điều như vậy? –

+1

@BorisCallens Ví dụ: tôi có thể muốn kiểm tra thay đổi hình ảnh trên trang web dàn dựng của mình, khi tôi có hình ảnh mới trên máy của riêng mình và tôi không muốn trải qua toàn bộ quá trình tải lên để dàn dựng. Dường như cách duy nhất để làm điều đó là thay đổi hình ảnh trong môi trường phát triển thay vì dàn dựng. –

+0

Nó cũng là một cách tuyệt vời để chơi một trò đùa về người quen ít có kỹ thuật của bạn, làm cho họ nghĩ rằng bạn đã hack vào một trang web. – 0112

Trả lời

46

Nó sẽ là một lỗ hổng bảo mật nếu khách hàng có thể yêu cầu tệp hệ thống tệp cục bộ và sau đó sử dụng JavaScript để tìm ra những gì trong đó.

Cách duy nhất xung quanh việc này là xây dựng tiện ích trong trình duyệt. Các phần mở rộng của Firefox và phần mở rộng của IE có thể truy cập các tài nguyên cục bộ. Chrome bị hạn chế hơn nhiều.

+0

vẫn còn, flash quản lý để truy cập mọi thứ mà người dùng chọn, ngay cả trong Chrome – Javier

+0

Đã bỏ phiếu này vì nó đã trả lời lý do và đưa ra một số cách xung quanh nó. Những gì tôi có thể sẽ làm (và tôi biết tôi đã không cung cấp nhiều nền tảng) là tạo ra một máy chủ web địa phương để phục vụ hình ảnh địa phương. Bằng cách đó, trình duyệt có thể hiển thị chúng. – PeterV

+0

Flash chỉ có thể truy cập các tài nguyên cục bộ bằng tệp chính sách tại chỗ hoặc nếu không nó sẽ chuyển sang chế độ cục bộ và bị hạn chế theo các cách khác. –

13

C: không phải là lược đồ URI được công nhận. Hãy thử file://c|/... để thay thế.

24

Trình duyệt không được phép truy cập hệ thống tệp cục bộ trừ khi bạn đang truy cập trang html cục bộ. Bạn phải tải lên hình ảnh ở đâu đó. Nếu thư mục này nằm trong cùng thư mục với tệp html, thì bạn có thể sử dụng <img src="localfile.jpg"/>

23

bạn không nên sử dụng "tệp: // C: /localfile.jpg" thay vì "C: /localfile.jpg"?

+5

CẢM ƠN BẠN. 7 năm một nhà phát triển .Net và tôi quên đặt tập tin: // ở phía trước ... –

+3

Vẫn không hoạt động! –

2

Quan sát của Newtang về các quy tắc bảo mật sang một bên, làm cách nào để bạn biết rằng bất kỳ ai xem trang của bạn sẽ có hình ảnh chính xác tại c:\localfile.jpg? Bạn không thể. Ngay cả khi bạn nghĩ rằng bạn có thể, bạn có thể không. Nó giả định một môi trường cửa sổ, cho một điều.

+0

Trừ khi bạn có thể. Tôi đã không đưa ra nhiều bối cảnh trong câu hỏi, tôi biết :) Nhưng trong trường hợp này chúng ta thực sự có thể biết. – PeterV

+5

Nếu anh ta chỉ có kế hoạch có 10 người dùng trong một văn phòng mà tất cả đều có môi trường cửa sổ và hình ảnh chính xác tại c: \ localfile.jpg. Để kết thúc ... anh ta hoàn toàn có thể không chỉ biết rằng những hình ảnh chính xác ở đó mà còn kiểm soát chúng. – Nazca

+0

Câu hỏi này là hợp lệ vì yêu cầu của anh ấy là dành cho môi trường cửa sổ, phục vụ cho một lượng khán giả rất hạn chế. Ví dụ, tôi chạy vào cùng một vấn đề khi tôi đã thiết kế một máy chủ web dựa trên Arduino, nơi khách hàng duy nhất là một máy tính Windows trên cùng một mạng LAN như máy chủ Arduino. Arduino là quá chậm trong việc phục vụ hình ảnh cho khách hàng vì vậy tôi cần thiết để lưu trữ các hình ảnh trên máy khách chính nó. – PrashanD

0

Bạn cần tải hình ảnh lên, sau đó liên kết tới hình ảnh trên máy chủ.

1

tôi thấy hai khả năng cho những gì bạn đang cố gắng làm:

  1. Bạn muốn trang web của bạn, chạy trên một máy chủ, để tìm các tập tin trên máy tính mà bạn ban đầu được thiết kế nó?

  2. Bạn muốn nó tìm nạp từ máy tính đang xem tại trang?

Lựa chọn 1 chỉ không có ý nghĩa :)

Lựa chọn 2 sẽ là một lỗ hổng bảo mật, trình duyệt cấm một trang web (phục vụ từ web) từ tải nội dung trên máy tính của người xem.

Kyle Hudson đã nói với bạn những gì bạn cần làm, nhưng điều đó rất cơ bản đến mức tôi thấy khó tin rằng đây là tất cả những gì bạn muốn làm.

-5

Um, chỉ cần nghĩ ... có hàng tỷ máy tính có ổ C: \ vậy làm thế nào để bạn mong đợi html trên máy chủ biết C: \ localfile.jpg địa phương của bạn? Mọi thứ phải có trên máy chủ.

Chuyển tệp hình ảnh của bạn sang máy chủ. Bạn cần phải đổi tên thẻ thành < img src = "localfile.jpg" > Hãy chắc chắn để đặt nó trong cùng một thư mục mà tài liệu được tuy nhiên tôi khuyên bạn nên thêm "hình ảnh" thư mục và đưa hình ảnh vào thư mục hình ảnh và viết như này: < img src = "images/localfile.jpg" > trên tài liệu của bạn.

+4

Tôi ghét loại câu trả lời có vẻ như là dịch hạch SO. Tôi đang viết một kịch bản để tự động hóa một nhiệm vụ trên ONE máy tính của tôi và tôi không quan tâm đến hàng tỷ trong số đó. Câu hỏi là hợp lệ. Um, hãy suy nghĩ thêm một chút. – DaveWalley

0

điều gì về việc có hình ảnh nào đó được người dùng chọn? Sử dụng thẻ đầu vào: tệp và sau đó sau khi họ chọn hình ảnh, hãy hiển thị hình ảnh đó trên trang web của khách hàng? Điều đó có thể thực hiện được cho hầu hết mọi thứ.Ngay bây giờ tôi đang cố gắng để làm cho nó làm việc cho IE, nhưng như với tất cả các sản phẩm microsoft, nó là một cụm ngã ba().

3

IE 9: Nếu bạn muốn người dùng xem hình ảnh trước khi đăng hình ảnh lên máy chủ: Người dùng nên THÊM trang web vào "danh sách Trang web đáng tin cậy".

1

nếu bạn sử dụng trình duyệt Google chrome bạn có thể sử dụng như thế này

<img src="E://bulbpro/pic_bulboff.gif" width="150px" height="200px"> 

Nhưng nếu bạn sử dụng Mozila Firefox, bạn cần phải thêm "tập tin" ex.

<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px"> 
+0

Điều đó không làm việc cho tôi trong chrome, nhưng nó hoạt động trong IE? – octopus

2

Thành thật nhất là cách thêm tệp lưu trữ vào máy chủ.

  • Mở IIS

  • Thêm một Virtual Directory dưới Default Web Site

    • đường dẫn ảo sẽ là những gì bạn muốn duyệt đến trong trình duyệt. Vì vậy, nếu bạn chọn "serverName/images bạn sẽ có thể duyệt đến nó bằng cách vào http://serverName/images
    • Sau đó thêm đường dẫn vật lý trên ổ C:
  • Thêm các điều khoản phù hợp với thư mục trên C:. lái xe cho "NETWORK SERVICE" và "IIS AppPool \ DefaultAppPool"

  • Refresh Default Web Site

  • và bạn đã hoàn tất Bây giờ bạn có thể duyệt đến bất kỳ hình ảnh trong thư mục đó bằng cách điều hướng đến http://yourServerName/whateverYourFolderNameIs/yourImage.jpg và sử dụng url trong src img của bạn

Hy vọng điều này sẽ giúp người

0

Nếu bạn đang triển khai một trang web địa phương chỉ cho chính mình hoặc khách hàng nhất định, bạn có thể khắc phục điều này bằng cách chạy mklink /D MyImages "C:/MyImages" trong trang web thư mục gốc với tư cách quản trị viên trong cmd. Sau đó, trong html, làm <img src="MyImages/whatever.jpg"> và liên kết tượng trưng được thiết lập bởi mklink sẽ kết nối liên kết src tương đối với liên kết trên ổ đĩa C. Nó giải quyết vấn đề này cho tôi, vì vậy nó có thể giúp những người khác đến với câu hỏi này.

(Rõ ràng điều này sẽ không hoạt động cho các trang web công cộng vì bạn không thể chạy lệnh cmd trên máy tính của mọi người một cách dễ dàng)

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