Nó hoạt động nếu tệp html là cục bộ (trên ổ C của tôi), nhưng không hoạt động 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?
Bất kỳ giải pháp thay thế có thể?
Nó hoạt động nếu tệp html là cục bộ (trên ổ C của tôi), nhưng không hoạt động 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?
Bất kỳ giải pháp thay thế có thể?
src=""
Câu trả lời:
Sẽ là một lỗ hổng bảo mật nếu khách hàng có thể yêu cầu các 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 để giải quyết vấn đề này là tạo một tiện ích mở rộng 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 hạn chế hơn nhiều.
bạn không nên sử dụng "file: // C: /localfile.jpg" thay vì "C: /localfile.jpg"?
Các trình duyệt không được phép truy cập vào hệ thống tệp cục bộ trừ khi bạn đang truy cập một trang html cục bộ. Bạn phải tải lên hình ảnh ở đâu đó. Nếu nó 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"/>
C:
không phải là một lược đồ URI được công nhận. Hãy thử file://c|/...
thay thế.
Thành thật mà nói, cách dễ nhất là thêm lưu trữ tệp vào máy chủ.
Mở IIS
Thêm một thư mục ảo trong trang web mặc định
Thêm các quyền thích hợp vào thư mục trên ổ C: cho "DỊCH VỤ MẠNG" và "IIS AppPool \ DefaultAppPool"
Làm mới trang web mặc định
Và bạn đã hoàn thành. Bây giờ, bạn có thể duyệt đến bất kỳ hình ảnh nào trong thư mục đó bằng cách điều hướng đến http: //yourServerName/w AnythingYourFolderNameIs/yourImage.jpg và sử dụng url đó trong img src
Hy vọng điều này sẽ giúp ai đó
IE 9: Nếu bạn muốn người dùng xem hình ảnh trước khi đăng nó 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".
chúng ta có thể sử dụng FileReader () của javascript và hàm readAsDataURL (fileContent) của nó để hiển thị tệp ổ đĩa / thư mục cục bộ. Liên kết sự kiện thay đổi thành hình ảnh sau đó gọi hàm showpreview của javascript. Thử đi -
<!doctype html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;'>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title></title>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript">
function showpreview(e) {
var reader = new FileReader();
reader.onload = function (e) {
$("#previewImage").attr("src", e.target.result);
}
//Imagepath.files[0] is blob type
reader.readAsDataURL(e.files[0]);
}
</script>
</head>
<body >
<div>
<input type="file" name="fileupload" value="fileupload" id="fileupload" onchange='showpreview(this)'>
</div>
<div>
</div>
<div>
<img width="50%" id="previewImage">
</div>
</body>
</html>
Quan sát của Newtang về các quy tắc bảo mật, làm thế nào bạn sẽ 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 không thể. Nó giả định một môi trường cửa sổ, vì một điều.
Tôi thấy có hai khả năng cho những gì bạn đang cố gắng làm:
Bạn muốn trang web của mình, chạy trên máy chủ, tìm thấy tệp trên máy tính mà bạn đã thiết kế nó ban đầu?
Bạn muốn lấy nó từ máy tính đang xem tại trang?
Lựa chọn 1 không có ý nghĩa :)
Tùy chọn 2 sẽ là một lỗ hổng bảo mật, trình duyệt cấm một trang web (được cung cấp từ web) tải nội dung trên máy của người xem.
Kyle Hudson đã nói với bạn những gì bạn cần phải làm, nhưng điều đó quá cơ bản đến mức tôi khó tin rằng đây là tất cả những gì bạn muốn làm.
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 thêm "tập tin" ex.
<img src="file:E://bulbpro/pic_bulboff.gif" width="150px" height="200px">
Bạn cần tải hình ảnh lên, sau đó liên kết đến hình ảnh trên máy chủ.
Còn việc để hình ảnh được người dùng lựa chọn thì sao? Sử dụng thẻ input: file và sau khi họ chọn hình ảnh, hãy hiển thị hình ảnh đó trên trang web phía máy khách? Điều đó có thể làm được cho hầu hết mọi thứ. Hiện tại, tôi đang cố gắng làm cho nó hoạt động cho IE, nhưng cũng như với tất cả các sản phẩm của microsoft, nó là một cluster fork ().
Nếu bạn đang triển khai một trang web cục bộ chỉ cho chính mình hoặc một số khách hàng nhất định, bạn có thể giải quyết vấn đề này bằng cách chạy mklink /D MyImages "C:/MyImages"
trong thư mục gốc của trang web với tư cách là quản trị viên trong cmd. Sau đó, trong html, do <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 ổ C của bạn. 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 có câu hỏi này.
(Rõ ràng điều này sẽ không hoạt động đối với 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)
Tôi đã thử rất nhiều kỹ thuật và cuối cùng đã tìm thấy một kỹ thuật trong C # side và JS Side. Bạn không thể cung cấp một đường dẫn vật lý cho thuộc tính src nhưng bạn có thể cung cấp chuỗi base64 dưới dạng thẻ src to Img. Hãy xem ví dụ mã C # bên dưới.
<asp:Image ID="imgEvid" src="#" runat="server" Height="99px"/>
Mã C #
if (File.Exists(filepath)
{
byte[] imageArray = System.IO.File.ReadAllBytes(filepath);
string base64ImageRepresentation = Convert.ToBase64String(imageArray);
var val = $"data: image/png; base64,{base64ImageRepresentation}";
imgEvid.Attributes.Add("src", val);
}
Hy vọng điều này sẽ giúp