2017-08-24 217 views
4

我需要将图像源设置为网络上的某个位置。html来自UNC路径的图像源

图片位于machineName \ mappedPath \ abc.jpg。

它不会在任何浏览器中加载,尽管我需要的只是IE v9及更高版本。当我在源检查位置设置为

<img src="\\machineName\mappedPath\abc.jpg"> 

当我在IE上的图像占位符,单击鼠标右键,看看我看到的地址设置为

file://machineName/mappedPath/abc.jpg 

使用文件属性具有这些路径的浏览器打开图像很好。

我试过添加IP。无法将域名添加为不在域上。

其他路径我尝试将源直接设置在下面。我读过,需要5个前斜线几个地方,但它并没有作出任何区别

<img src="file://\\machineName\mappedPath\abc.jpg"> 
<img src="file:////\\machineName\mappedPath\abc.jpg"> 
<img src="file://///\\machineName\mappedPath\abc.jpg"> 
<img src="file:////machineName/mappedPath/abc.jpg"> 
<img src="file://///machineName/mappedPath/abc.jpg"> 
<img src="\\machineName\mappedPath\abc.jpg"> 

我还试图通过添加防火墙规则

https://blogs.msdn.microsoft.com/windows_azure_connect_team_blog/2011/01/20/windows-azure-connect-use-case-enable-file-sharing-on-windows-azure-vm/

实现文件共享请注意,路径必须映射为网络驱动器,还是足以将其设置为网络共享?

没有一个明确的来源,但是这是很常见的一种信息我已经遇到https://jonlabelle.com/snippets/view/html/create-html-link-to-unc-path,但它不会(在IE)

+0

它应该是'// MYSERVER/mappedPath/abc.jpg'不是'\\\ myserver \ mappedPath \ abc.jpg'路径是错误的 – Sand

+0

它不在网络服务器上。 //使它从http源加载。它确实需要是file://。更新的问题,使之更清晰 – user48408

+0

真的,你不能看到路径是错误的,我知道你不能用\\\访问本地机器。 – Sand

回答

1

我发现this post为我工作。它可能有一些相关的信息。

这里的答案从Paul Zahra:所以我创建了一个扩展的HtmlHelper的MVC助手

火狐将不显示图像的联网。

public static class ImageHelper 
{ 
    /// <summary>Converts a photo to a base64 string.</summary> 
    /// <param name="html">The extended HtmlHelper.</param> 
    /// <param name="fileNameandPath">File path and name.</param> 
    /// <returns>Returns a base64 string.</returns> 
    public static MvcHtmlString PhotoBase64ImgSrc(this HtmlHelper html, string fileNameandPath) 
    { 
     var byteArray = File.ReadAllBytes(fileNameandPath); 
     var base64 = Convert.ToBase64String(byteArray); 

     return MvcHtmlString.Create(String.Format("data:image/gif;base64,{0}", base64)); 
    } 
} 

在MVC视图使用像这样:

using 
<img src="@Html.PhotoBase64ImgSrc(image)" height="60px" width="60px" alt="photo" /> 

在这里@ Html.PhotoBase64ImgSrc(图像)的 '图像' 是一个纯粹的网络UNC,例如

//Photos/ebaebbed-92df-4867-afe8-0474ef8644eb.jpg 
+1

这是行得通的,对于某些人来说我会很方便,但是因为我可以拥有多达5000个图像,所以它不是我可以使用的解决方案,因为它会涉及更改体系结构以确保只显示可见图像base64编码在任何时候 – user48408

+0

也许你可以加载图像时,用户滚动到他们? – RubbelDieKatz

+1

我正在使用网格(datatables.net启用延迟渲染)。它只能处理加载可见图像。我可以想象,通过切换到服务器端模式可以看到这种工作方式,但是涉及到相当多的副作用。这是一个可行的解决方案,但在开始之前我宁愿看看我是否可以以某种方式设置图像src。我只关心IE,虽然这种方法在Chrome和FF中存在问题,但在IE中像这样设置图像源应该是可行的 – user48408

2

前两个是协议指示器的一部分(“文件://”),则主机名(应该是该文件应该从被访问的主机名,即本地主机,这是默认,因此可以留空!),然后是另一个斜线,然后开始UNC路径,这解释了最后两个斜杠,因为所有UNC路径都以两个斜杠开始。

试过以下?

<img src="file://localhost/\\machineName\mappedPath\abc.jpg"> 
+0

我的确如此,正如你所提到的,localhost部分是可选的,所以文件:/// \\和file:// localhost/\是相同的。我不会忍受我尝试过的所有斜线组合,但我已经尝试了很多。我现在正在考虑它的安全问题,这是不可能的,或者它需要我的一些配置与我如何设置网络共享 – user48408

+0

file:/// \\也应该工作。你是否试图从防火墙外部访问?你有没有考虑过将http服务器设置为计划b?这将统一你的图像路径语法。 – Syden

+0

由于安全限制,无法通过file:// via UNC访问根目录以外的图片! – floGalen

0

我在NAS上有一些图片。为了能够展示他们,我不得不做一些严肃的研究,因为这是一种痛苦。不知何故,几乎没有任何信息。下面是我做的:

我也尝试了每一种可能的方法// \,////,这些方法和IP的组合以及其他方法......没有办法让它工作。

但是实际工作的是/例如上传到\\IE-NAS-01\Data\Pictures。这样我就可以使用它,因为一旦你设置了这些操作的权利,PHP就允许这样做。

这是因为HTML没有被授予在你的wwwroot目录之外的步骤,所以你不能访问你的服务器或网络上的任何文件。但是一旦你设置了你的虚拟目录,它就是wwwroot的“一部分”。

我希望这将有助于

干杯

编辑: 你会发现一些在这里: - Stack Overflow #13421784 - https://stackoverflow.com/a/258380/8188398

显示外根的图片用PHP:

<img src="http://path.to/this/file.php"/>

file.php:

<?php 
header('Content-Type: image/jpeg'); 
readfile('path/to/image.jpeg'); 

这样可以避开限制!干杯!

PS:内容类型:

header('Content-Type: image/gif'); 
header('Content-Type: image/jpeg'); 
header('Content-Type: image/png'); 
+0

因此,您可以阅读其他两个问题,实际上有一个php解决方案。但它不会与简单的HTML工作。可以使用虚拟目录或php来在网络上显示图像。欢呼:) – floGalen

+0

感谢您的建议,但我必须考虑到存在100个未知的映射/共享位置,因此无法为每个位置创建虚拟目录。我敢肯定,在很多情况下,这将是一个很好的解决方案 – user48408

+0

以及你可以运行某种'.bat文件'来创建这些VR。但为了用纯HTML显示这些图像,您不能使用file://作为src。此外,例如,如果您想链接到其中一张图片,那么每个使用'file://'的链接都不能在Chrome中运行,因为这是出于安全目的!一种方法是用php查看图片并以这种方式显示。然后你避免了服务器/ html – floGalen

1

您应该添加3个/与文件的路径://前缀:

<img src="file://///machineName/mappedPath/abc.jpg">