הורדת קבצים מה-DB

הורדת קבצים מה-DB

יש לי קובץ כזה:
<% Response.Expires = 0 Dim oconn Dim ors Set oconn = Server.CreateObject("ADODB.Connection") Set ors = Server.CreateObject("ADODB.Recordset") oconn.Open "XXX" sql = "SELECT " & request("field") & " FROM " & request("table") & " WHERE ID" & "=" & request("id") ors.Open sql, oconn, 3 Response.BinaryWrite ors.Fields.Item(0).Value ors.Close oconn.Close set ors = nothing set oconn = nothing %>​
ולינק:
<a href="getfile.asp?field=PDF&table=WS_White_Papers&id=<%=WPRs("ID")%>" class="download">​
אם זו תמונה, או קובץ WORD, או סתם קובץ טקסט, הוא נפתח ישירות בדפדפן. אבל כשזה קובץ PDF, פשוט לא קורה כלום... כאילו ללחוץ על לינק ריק. (אין לי ACROBAT מותקן על המחשב) ואני רוצה שזה יעשה download לקובץ...
מישהו
 
ואל תגידו לי

שזה לא טוב לשמור קבצים שלמים בדיבי... אני יודעת, אבל זו לא בחירה שלי
 
טוב... הבנתי קצת יותר את הבעייה שלי

Response.BinaryWrite מציג את הקובץ בדפדפן במקום לאפשר הורדה. אז איך כותבים לינק שיעשה Download לקובץ ששמור ב- SQLSRV?
 
אוי, מותק... רק לא דמעות.

מה שנשלח לדפדפן גם אמור לרדת למחשב (אם לא בצורת קובץ, אז לתיקיית Temporary Internet Files)... אם לא קורה כלום זה רק בגלל שכנראה מותקנת תוכנה במחשב שמחכה לטפל בקובץ הזה. זאת במידה ושאר סוגי הקבצים מטופלים כמו שצריך... אחרת, זו כבר בעיה בקוד.
 
מה זאת אומרת

תוכנה שמחכה לטפל בקובץ? תמונות ומסמכים נפתחים בדפדפן, נסיון שעשיתי עם קובץ זיפ פשוט הציג לי אותו בג´יבריש על המסך
במקום לתת לי לשמור אותו, וקבצי PDF (שזה בעצם מה שאני צריכה) פשוט לא עושים כלום
 

rmarko

New member
תנסי להתקין את acrobat reader ../images/Emo17.gif

ולראות אם זה נפתח כמו שצריך. אם לא - תעשי ניסוי כלים לראות אם זה עובד גם באתרים אחרים; אם זה עובד באחרים ולא אצלך, תשקלי התרחשות תאונה לא צפוייה לבעל הבקשה של שמירת הקבצים במסד.
אגכ הסתדרת עם המספור אוטומטי באקסס?
 
באתרים אחרים

קבצי PDF וכמובן קבצי זיפ מבקשים לשמור את עצמם כשמורידים אותם... רק אצלי לא...
הבעייה היא בקוד, רק שאני לא מבינה איפה... עם האקסס הבעייה היתה יותר עקרונית (למי אכפת מהאצבעות שלי שצריכות לרשות שמות 20 השדות שיש בטבלה
). עדיין לא הגיוני לי שאין דרך לומר - "זה שדה מספור אוטומטי, יאללה, תוסיף אותו".
 

rmarko

New member
זה לא נכון

לדעתי את יוצאת מנקודת הנחה מוטעית, שאקספלורר מנסה להוריד קובץ מסוים - מברר מה המחרוזת ההתחלתית שלו ובהתאם לכך קובע מה הפורמט של הקובץ ומחליט מה לעשות איתו. ממש לא: תנסי לעשות קובץ html שבתוכו יש לינק לקובץ blah.zip - כשקובץ זה, הוא קובץ טקסט אסקיי לכל דבר. כשתלחצי על הלינק, אקספלורר יתן לך את דיאלוג שמירת הקובץ למרות שזהו קובץ txt עם סיומת שונה. אותו הדבר עם zip שנפלט דרך קובץ asp. אם את רוצה שיהיה לך דיאלוג שמירת קובץ, אקספלורר צריך לקבל קובץ שהסיומת שלו היא zip. בין אם זה אומר לא לשים את הקבצים האלה במסד נתונים או לפלוט את הקובץ באמצעות filesystemobject באופן זמני ולמחוק אותו אחרי שהמשתמש גמר להוריד או הפסיק באמצע (שלי אישית אין מושג איך לעשות ב- asp) - בקלות כזאת לא תצליחי לצאת מהבעיה
לגבי אקסס: עקבתי אחרי הבעיה אבל לא הבנתי אותה. יש לך 20 שדות כשהראשון מהם הוא מספור אוטומטי, כן? ואת צריכה לעשות insert בלי ado. אי אפשר פשוט לעשות insert ל- 19 שדות ולדלג על השדה הראשון
 
אז זהו שלא...

ב- SQLSRV אפשר בכיף לדלג על השדה הראשון, והוא משלים אותו. אבל אקסס מסרב בתוקף להתנהג כמוהו
טוף... אז כנראה אני אצטרך לשנות את הכל ולשמור את הקבצים מחוץ לדיבי, ושהבוס שלי והלקוח ילכו...
 

דלילה

New member
כמה שיותר מהר שתשלחי אותם יותר טוב

כבר יש שם פיצוץ אוכלוסין
 

Netposition

New member
MIME Type

כמו שזה נראה, הבעיה היא ב MIME Type. כשמדובר בקובץ, השרת שולח יחד עם הקובץ הגדרה של MIME במקרה של PDF זה אמור להיות application/pdf ואז הבראוזר יודע איך לטפל בקובץ הוספה של Response.ContentType = "application/pdf" לפני שאת כותבת את הקובץ עשויה לפתור את הבעיה. מה שמוזר בסיפור הוא שאת לא מקבלת כלום, כאילו שנשלח אליך קובץ בגודל אפס. תנסי את ה Response.BinaryWrite ב Response.Write כדי לבדוק אם את מקבלת משהו בכלל. אם לא קיבל כלום כנראה שהבעיה שלך אחרת.
 

rmarko

New member
../images/Emo45.gif אחלה

את האמת היתה לי הרגשה (אחרי שכבר כתבתי את ההודעה
) שיש לזה קשר ל- content type אבל לא היה לי כח לעשות מחקר - סחתיין על הפתרון. מה שכן, חשבתי על דבר אחר: ילדה, באילו גדלים של קבצים בדיוק מדובר? כי אפילו אם תבחרי בסוף כן להכניס את תכני הקבצים לתוך מסד הנתונים - זמן ריצת הסקריפט בשרת יהיה יותר מדי ארוך, וסתם יגרור הרבה מתח נפשי למחשב; אם בעל השרת לא יודע את זה- אולי כדאי ליידע אותו.
 
למעלה