كيف يمكنني الحصول على مسج هو Uploadify البرنامج المساعد للعمل مع ASP.NET MVC?

StackOverflow https://stackoverflow.com/questions/1002680

  •  05-07-2019
  •  | 
  •  

سؤال

أنا في عملية محاولة الحصول على البرنامج المساعد مسج ، Uploadify, العمل مع ASP.NET MVC.

لقد حصلت على البرنامج المساعد في الظهور بشكل جيد مع جافا سكريبت التالي مقتطف:

<script type="text/javascript">
    $(document).ready(function() {
        $('#fileUpload').fileUpload({
            'uploader': '/Content/Flash/uploader.swf',
            'script': '/Placement/Upload',
            'folder': '/uploads',
            'multi': 'true',
            'buttonText': 'Browse',
            'displayData': 'speed',
            'simUploadLimit': 2,
            'cancelImg': '/Content/Images/cancel.png'
        });
    });
</script>

التي يبدو أن كل شيء على ما يرام في حالة جيدة.إذا لاحظت أن "السيناريو" تم تعيين سمة من حسابي /وضع/تحميل, الذي هو موضع تحكم و تحميل العمل.

المشكلة الرئيسية هي أنني أواجه صعوبة في الحصول على هذا العمل إلى النار لاستلام الملف.لقد تعيين نقطة توقف على هذا العمل و عندما حدد الملف المراد تحميله ، فإنه لن يعدم.

لقد حاولت تغيير طريقة التوقيع على الخروج هذه المادة:

public string Upload(HttpPostedFileBase FileData)
{
    /*
    *
    * Do something with the FileData
    *
    */
    return "Upload OK!";
}

ولكن هذا لا يزال لا النار.

أي شخص يمكن أن تساعد لي أن أكتب و الحصول على تحميل تحكم عمل توقيع بشكل صحيح لذلك سوف في الواقع النار ؟ لا يمكن التعامل مع التعامل مع ملف البيانات نفسي.أنا فقط بحاجة إلى بعض المساعدة في الحصول على طريقة عمل إلى النار.

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

المحلول

public string Upload(HttpPostedFileBase FileData) {}

هو صحيح - الملف الذي تم تحميله عن طريق التحميل سوف يحصل على ملهى إلى filedata. لا حاجة للدخول إلى طلب.

إذا لم يكن الإجراء الخاص بك يطلق على الإطلاق (أي حاول تصحيح الأخطاء ومعرفة ما إذا كانت نقطة توقف داخل الطريقة قد تم ضربها) ، فمن المرجح أن تكون مشكلتك قيمة "البرنامج النصي" - هل تعمل تحت دليل افتراضي؟ إذا كان الأمر كذلك ، فستحتاج إلى وضع اسم الدليل في المقدمة. يعمل تحميل المسار المطلق.

أي "البرنامج النصي:"/virtual_directory/وضع/تحميل "

في الوقت الحالي ، يتم إرسال التحميل إلى http: // localhost/وضع/التحميل.

حاول أيضًا استخدام Doute Debugger (http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx) للتحقق من المكان الذي يتم تعيين مسارك إليه.

نصائح أخرى

قد تكون المشكلة التي تحتاج إلى تحديد الإجراءات التي يتم تحميلها إلى مجموعة ما بعد...فهو لن يعمل مع العمل على الحصول على العمل.

لذلك هذا:

public string Upload(HttpPostedFileBase FileData)
{
   //do something
}

يجب أن يكون هذا:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Upload(HttpPostedFileBase FileData)
{
   //do something
}

أيضا ، أن تكون على علم أنه إذا كنت تستخدم هذا في "تسجيل الدخول" قسم من موقع الويب الخاص بك ، يجب أن نلقي نظرة هنا على علة معروفة مع uploadify والتوثيق: http://geekswithblogs.net/apopovsky/archive/2009/05/06/working-around-flash-cookie-bug-in-asp.net-mvc.aspx

أيضا, فقط جانبا ، هناك عدة طرق في MVC التعامل مع تحميل الملفات (باستخدام الطلب.الملفات كما في روري فيتزباتريك اقتراح ، وكذلك اجتياز HttpPostedFileBase الملف كحجة في العمل الوضوح).لا يجب أن يكون مهما من أجل الحصول على Uploadify العمل.

هذه ليست الطريقة التي اضطررت بتنفيذ تحميلها على الإطلاق. كان لدي طريقة عمل بدون معلمات استخدمت كائن الطلب الحالي للغوص في مجموعة الملفات المنشورة.

بعض رمز النماذج من تنفيذي:

[AcceptVerbs(HttpVerbs.Post)]
public ContentResult Upload() {
    if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) {
        HttpPostedFileBase postedFile = Request.Files[0];
        // Do something with it
    }
}

بالطبع ، تصبح اختبارات الكتابة لهذا بيتا. يجب أن تسخر من العديد من الكائنات من أجل جعلها تعمل ، على سبيل المثال:

var mockHttpContext = mocks.StrictMock<HttpContextBase>();
var mockRequest = mocks.StrictMock<HttpRequestBase>();
var postedFile = mocks.StrictMock<HttpPostedFileBase>();

var postedFileKeyCollection = mocks.StrictMock<HttpFileCollectionBase>();

mockHttpContext.Expect(x => x.Request).Return(mockRequest).Repeat.Any();
mockRequest.Expect(x => x.Files).Return(postedFileKeyCollection).Repeat.Any();

postedFileKeyCollection.Expect(x => x[0]).Return(postedFile).Repeat.Any();
postedFileKeyCollection.Expect(x => x.Count).Return(1);

postedFile.Expect(f => f.ContentLength).Return(1024);
postedFile.Expect(f => f.InputStream).Return(null);

سيكون من الأسهل إنشاء واجهة في الملفات المنشورة وسخر فقط من ذلك ، مع حقن تطبيق ملموس في وحدة التحكم الخاصة بك باستخدام IOC.

أعتقد أن هذا استند إلى حد كبير من هذا المنشور: تنفيذ تحميل ملف HTTP مع ASP.NET MVC بما في ذلك الاختبارات والسخرية

إن حلي الكامل لهذا قد يحل مشكلتك. أتمنى أن يساعد ذلك.

http://zootfroot.blogspot.com/2010/12/mvc-file-upload-using-uploadify-with.html

قراءة الوثائق ، يبدو أنها ترسل مجموعة من الملفات. هل جربت:

public string Upload( HttpPostedFileBase[] fileData )

من الممكن أيضًا ألا يعمل موثق النموذج الافتراضي مع httppostedfilebase وستحتاج إما إلى استخدام آلية Rory أو كتابة موثق النموذج الخاص بك.

إليكم عرض الحلاقة البسيطة (Master Layout يحتوي على حزم JavaScript)

@{
ViewBag.Title = "Upload Email CSV";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript" src="@Url.Content("~/Scripts/Uploadify/jquery.uploadify.js")"></script>

<script type="text/javascript">

$(function () {
    var uploadUrl = "@Url.Content("~/UploadFile/UploadEmailCSV/")";
    var uploadSWF = "@Url.Content("~/Scripts/Uploadify/uploadify.swf")";
    var uploadifyButtonImage = "@Url.Content("~/Scripts/Uploadify/uploadify.swf")";

    $('#file_upload').uploadify({
        'fileSizeLimit': '0',
        'buttonImage': '/uploadify/browse-btn.png',
        'swf': uploadSWF,
        'uploader': uploadUrl,
        'onUploadSuccess': function(file, data, response) {
            alert('The file was saved to: ' + data);
        }
    });
});
</script>
<h2>Upload a comma separated list of email addresses</h2>
@using (Html.BeginForm("UploadEmailCSV", "UploadFile", FormMethod.Post, new { @class = "form-horizontal", @enctype = "multipart/form-data", @id = "frmUploadFiles" }))
{
    <input type="file" name="file_upload" id="file_upload" />
}

هنا طريقة كونتولر

public ActionResult UploadEmailCSV()
    {
        var uploadedFile = Request.Files["Filedata"];

        if (uploadedFile != null && uploadedFile.ContentLength > 0)
        {
            var filePath = Path.Combine(Server.MapPath("~/UploadedFiles"), string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(uploadedFile.FileName), DateTime.Now.Ticks, Path.GetExtension(uploadedFile.FileName)));
            uploadedFile.SaveAs(filePath);
            return Content(string.Format("{0}_{1}{2}", Path.GetFileNameWithoutExtension(uploadedFile.FileName), DateTime.Now.Ticks, Path.GetExtension(uploadedFile.FileName)));

        }
        return Content("Error Uploading file!");
    }

هذا هو!

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