我目前正在一個項目中,我只能在本地訪問一個文件服務器上的一堆tiff圖像,所有圖像都是tiff,這給我一個很難的時間'因爲圖像要顯示在Web瀏覽器,問題是,我已經發現有麻煩解決這一問題的好我自己,這是我一直在做:如何將其轉換爲將圖像流回到iframe的WCF服務?
問題:
希望在網站上安裝此更新的人曾使用一個aspx頁面,接收請求參數以搜索tiff圖像,將其轉換爲png並通過使用Response.OutputStream.Write
將文件「流」到客戶端,現在,轉換文件和「流式傳輸」文件的過程是羚牛g在500毫秒到一整分鐘之間(這是最多100kb的文件)。
過去,他們使用了一種叫做「替換」的東西,它似乎更快,因爲它不需要手動轉換文件。問題是,這種方法需要使用iframe或對象。
我做了什麼
因爲我想要的一切更容易維護,我決定做一些修改頁面的工作方式和使用Web服務(ASMX)+ jQuery的阿賈克斯,現在,當我研究瞭如何使用它似乎使這項工作的唯一方法alternatiff是將文件轉換爲base64字符串,並將其嵌入在IFRAME SRC,作爲顯示如下:
var url = "/Web_Service/WS_Expedientes.asmx/getImagen";
var type = "POST";
var params = { 'ruta': $(this).attr('id') };//the id of the image that is being requested
ajaxCalls(type, url, params).done(function (result) {
//alert(JSON.stringify(result));
var str = "";
for (var i = 0; i < result.d.length; i++)
str += String.fromCharCode(result.d[i]);
var img= btoa(str)
//alert(JSON.stringify(img));
//var img = btoa(String.fromCharCode.apply(result, result)).replace(/.{1,76}/g, '$&\n');
//$("#visor-expedientes .wrapper").html("<object width=200 height=200 classid='CLSID:106E49CF-797A-11D2-81A2-00E02C015623'> <param name='src' value='tiffdocument.tif'> <param name='negative' value='yes'> <embed width=200 height=200 src='data:image/tiff;base64," + img + "' type='image/tiff'> </object>");
//$("#visor-expedientes .wrapper").html("<iframe id='visor' src='data:image/tiff;base64," + img + "' />");
$("#visor-expedientes").html("<embed id='visor' name='plugin' src='data:image/tiff;base64," + img + "' type='image/tiff'></embed>");
//$('#visor-expedientes iframe').attr('src', 'data:image/tiff;base64,' + result);
}).fail(function (error) {
alert("error " + error.d);
});
上述方法只在Firefox壽工作,顯然有一個限制,可以有多大的字符串(顯然32kb的IE和Chrome,Firefox似乎也有這個限制,但它似乎允許更大的字符串)。所以目前tiff查看器只能在firefox上工作,我真的不想訴諸使用一個aspx頁面來「流」文件,我想繼續使用這個web服務,但是¿你會如何使它成爲iframe會消耗Web服務? ¿我如何將參數從iframe傳遞給Web服務(也就是我需要顯示的圖像的ID)。我試圖簡單地將Web服務url放在iframe的src字段上,但那也行不通。
在此先感謝。
PS:這可能是完全不相關的,但是,之前有人指出,ASMX是很「古老」我必須說,事情是使用框架2.0和Visual Basic這一點,即使客戶端我想把所有的東西都切換到最新的框架,我真的不能這樣做,因爲這是他們想要的這個開發的一部分,因爲他們能夠獲取代碼並「修復它」並維護它,如果他們需要,沒有付出任何努力去學習新的東西(哎呀,即使asmx對他們來說似乎是一個完全古怪的東西,所以我說爲了推進開發方法,如果只有一點點,我就說了。)
編輯
好吧,我繼續開始搜索最深的互聯網默默無聞,因此,我決定放棄並嘗試遷移到wcf,事情是,仍然沒有關於什麼的信息這個過程對於我來說能夠做我想做的事,換句話說,你將如何翻譯這個(這是他們當時正在做的事情):
ObtenerImagen。ASPX
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="ObtenerImagen.aspx.vb" Inherits="ObtenerImagen" ContentType="image/tiff" %>
ObtenerImagen.aspx.vb
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
Dim ls_rutaArchivo As String
Dim key As String
Dim lo_cryptUtil As New UtilSyc.Seguridad.Criptografia()
If Request.Params("ruta") Is Nothing Then
Throw New FormatException("La llave (ruta) debe ser una cadena válida")
Else
key = Request.Params("ruta")
End If
ls_rutaArchivo = lo_cryptUtil.Desencrit(key)
'13464354
Response.ContentType = "image/tiff"
Response.Clear()
Response.TransmitFile(ls_rutaArchivo)
End Sub
,並通過與上述頁面src和文件「流回」的IFRAME的路徑添加一個iframe調用頁面請求參數。
function visorImagenes(id) {
$("#visor").html("<object width='75%' height='100%' classid='CLSID:106E49CF-797A-11D2-81A2-00E02C015623'> <param name='src' value='/Expedientes/ObtenerImagen.aspx?ruta=" + id + "'> <param name='negative' value='no'> <embed width='75%' height='100%' src='/Expedientes/ObtenerImagen.aspx?ruta=" + id + "' type='image/tiff'> </object>");
}
¿您將如何去將上面的aspx頁面轉換爲可以被同一個iframe使用的WCF?
與像所示的一個方法創建一個WCF Web服務:
打開tiff並以pdf格式包裝。例如,如果圖像數據是ccittg4(b/w掃描),那麼做起來很簡單 – mplungjan
您可以詳細說明這個過程嗎,我不知道如何做這個包裝你說。 –