เปิดไฟล์ฟิสิคัลบนเซิร์ฟเวอร์โดยใช้ ASP.NET

ฉันต้องการเปิดไฟล์ฟิสิคัลบนเซิร์ฟเวอร์บนไฮเปอร์ลิงก์ คลิก

<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink>

"FullPath" เหมือนกับ "E:\PINCDOCS\Mydoc.pdf"

ขณะนี้อยู่ใน Chrome ฉันได้รับข้อผิดพลาด

ไม่ได้รับอนุญาตให้โหลดทรัพยากรในเครื่อง:

สามารถทำได้หรือมีวิธีแก้ปัญหาอื่นหรือไม่?


person chamara    schedule 15.05.2013    source แหล่งที่มา
comment
ใช้ปุ่มลิงค์ เพิ่มตัวจัดการเหตุการณ์สำหรับปุ่ม เปิดไฟล์บนฝั่งเซิร์ฟเวอร์ (ใช้ Server.MapPath method) แล้วสตรีมเป็น pdf ถ้าเป็นไปได้ จะดีกว่าถ้าเป็นไปได้ ให้คัดลอกไฟล์นั้นในไดเร็กทอรีทรัพยากรแบบคงที่ของคุณ และใช้ไฮเปอร์ลิงก์ปกติ   -  person mshsayem    schedule 15.05.2013
comment
เพื่อให้ไคลเอนต์ดาวน์โหลดไฟล์คุณต้องมี url ขั้นแรกคุณต้องแปลงพาธในเครื่องเซิร์ฟเวอร์ของคุณเป็น url นี่คือลิงค์สำหรับดำเนินการ stackoverflow.com/questions/16007/< /ก>   -  person Kiarash    schedule 15.05.2013


คำตอบ (2)


ไฟล์ฟิสิคัลควรอยู่ภายในเว็บไซต์ IIS, Virtual Directory หรือ Web Application ดังนั้น คุณจะต้องสร้างไดเรกทอรีเสมือนไปที่ E:\PINCDOCS ดูคำแนะนำที่นี่: http://support.microsoft.com/kb/172138

จากนั้นในโค้ดด้านหลัง คุณสามารถใช้โค้ดเช่น: http://geekswithblogs.net/AlsLog/archive/2006/08/03/87032.aspx เพื่อรับ URL สำหรับไฟล์ฟิสิคัล

person Philip Pittle    schedule 15.05.2013
comment
นอกจากนี้ หากคุณอยู่ในเครือข่ายเดียวกันกับเซิร์ฟเวอร์ คุณสามารถใช้ชื่อเครือข่ายได้ เช่น: \\servername\e$\PINCDOCS\Mydoc.pdf จากนั้นคุณก็ไม่ต้องยุ่งกับ IIS - person Philip Pittle; 15.05.2013

เมื่อคุณตั้งค่า NavigateUrl เป็น FullPath Chrome จะเห็นลิงก์ในเครื่องของผู้ใช้ที่กำลังเข้าถึงไซต์ ไม่ใช่เซิร์ฟเวอร์เอง

ดังนั้น คุณจะต้องสร้าง URL สำหรับไฮเบอร์ลิงก์ให้อยู่ในรูปแบบ //someURL หรือ http://someurl เสมอ

ในกรณีของคุณ คุณต้องลบ NavigateUrl และเพิ่มตัวจัดการ OnClick และภายในตัวจัดการ คุณจะอ่านไฟล์โดยใช้ FileStream และเขียนเนื้อหาไฟล์ลงในสตรีมการตอบกลับ จากนั้นจึงล้างข้อมูล

ตัวอย่างของตัวจัดการการคลิก:

context.Response.Buffer = false;
context.Response.ContentType = "the file mime type, ex: application/pdf";
string path = "the full path, ex:E:\PINCDOCS";

FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = context.Response.OutputStream;
using(Stream stream = File.OpenRead(path)) {
    while (len > 0 && (bytes =
        stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        outStream.Write(buffer, 0, bytes);
        len -= bytes;
    }
}
person Haitham Shaddad    schedule 29.09.2016