سؤال

أقوم بتحميل ملف باستخدام عنصر تحكم بسيط في ملفات التحميل المسماة theFile (asp.net). أحاول الحصول على المسار المطلق للملف، ولكن thefile.PostedFile.FileName و thefile.FileName هي نفسها بالضبط، فقط اسم الملف، لا مسار! لا يمكنني استخدام Server.Mappath لأنني سأقوم بحفظ هذا الملف على خادم مختلف (نقل صفيف بايت من خلال Webservice).

يكسر في هذا الخط:

Dim fStream As New FileStream(thefile.FileName, FileMode.Open, FileAccess.Read)

لأنه يأخذ اسم الملف ورسم خرائطه إلى المسار النسبي ل VS الخاص بي! أحتاج إلى المسار المطلق ...

هل كانت مفيدة؟

المحلول

لن يحتوي ملف تم تحميله عبر HTTP على المسار الكامل الموجود على جهاز Remote (العميل) - يمكنه التخلي عن المعلومات حول بنية دليلهم، وهكذا تعتبر مخاطرة أمنية. بالإضافة إلى ذلك، ما المستخدم سيكون؟ إذا كان شخص ما يقوم بتحميل ملف من عبر الإنترنت، فلماذا تحاول فتح آلة FileStream على جهازك المحلي (ASP.NET Server) في المسار الموجود على جهازهم؟

تأتي الملفات التي تم تحميلها فعليا كدفق من البايت كجزء من الطلب. تحتاج إلى الوصول إلى filebytes. خاصية عنصر التحكم للحصول على الملف، أو استدعاء طريقة Saveas () لحفظه على الخادم. في حالتك، يمكنك فقط الحصول على البايتات وإرسالها إلى مكالمة WebService التي تحتاج إليها.

نصائح أخرى

(نقل عبر صفيف بايت من خلال WebService).

نظرا لأنك تتطلب حاليا مجموعة صفيف بايت الملف، فلماذا لا الوصول إلى صفيف بايت الملف من خلال خاصية thefile.filebytes؟

فيما يلي المرجع إلى خاصية FileBytes لعنصر التحكم في ويب Fileupload: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filebytes.aspx.

إذا كنت ترغب في الوصول إلى كائن Stream مباشرة، يمكنك الاستفادة من الخاصية FileContent. هنا هو الإشارة إلى الخاصية FileContent لعنصر التحكم في ويب Fileupload: http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.filecontent.aspx.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top