Как получить поток или байтовый массив из входных данных загрузки с помощью JQuery и преобразовать его в base64? - PullRequest
0 голосов
/ 24 июня 2019

Как я могу получить данные байтового массива из типа ввода загрузки файла, используя JQuery, и преобразовать их в base64, чтобы я мог разобрать их в пост-вызов JQuery Ajax?

У меня есть модуль DNN, который позволяетВам загрузить картинку.Я изменяю свой код, чтобы использовать вызов Ajax вместо Postbacks.

 <asp:FileUpload CssClass="fileuploadcss" ClientIDMode="Static" ID="upload_control" runat="server" />

У меня есть отдельное имя класса в папке моего модуля, которое называется UploadController.cs, но внутренний код не может подобрать имяэлемента управления «upload_control», поэтому я не могу использовать SaveAs для сохранения файла в папке пользователя DotNetNuke.

Я пытаюсь создать что-то вроде этого

 var pathString = System.IO.Path.Combine(newfolder + "/", CleanFileName);

 using (DataFile = System.IO.File.Create(pathString))
 {

 }

Это мойКод Ajax:

var Filename = $("#upload_control")[0].files[0].name;
var Maxuploadsize = "<%=ImageMaximumUploadSize%>";
var Sizeoffile = $("#upload_control")[0].files[0].size;
const bytes = $("#upload_control")[0].files[0].split('base64,')[1];

$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
cache: false,
url: $.fn.GetBaseURL() + 'DesktopModules/ProductView/API/Upload/UploadImage?FileName=' + Filename + '&MaxUploadSize=' + Maxuploadsize + '&SizeOfFile=' + Sizeoffile + '&DataFile=' + bytes,
datatype: "json",
success: function (data) {
alert("Upload Successfull");
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.responseText);
}
});

Это код класса контроллера загрузки, который вызывается кодом AJAX.

    public class UploadController : DnnApiController
{
    /// <summary>
    /// Uploads a custom image
    /// </summary>
    /// <returns></returns>
    /// <remarks>24/06/2019</remarks>
    [AllowAnonymous]
    [HttpPost]
    public void UploadImage(string FileName, string MaxUploadSize, string SizeOfFile,  Stream DataFile)
    {
        try
        {
            var FileN = FileName;
            var MaxUpload = Convert.ToInt32(MaxUploadSize);
            var FileSize = Convert.ToInt32(SizeOfFile);
            var id = PortalController.Instance.GetCurrentPortalSettings().PortalId;

            var userfolderpath = FolderManager.Instance.GetUserFolder(UserInfo).FolderPath;
            var portalPath = System.Web.Hosting.HostingEnvironment.MapPath("~/Portals/" + id);
            var newfolder = portalPath + "/" + userfolderpath;

            Directory.CreateDirectory(newfolder);

            var pathString = System.IO.Path.Combine(newfolder + "/", FileN);

            using (DataFile = System.IO.File.Create(pathString))
            {

            }                                                        
    }
        catch (Exception ex)
        {               
            EventLogController logController = new EventLogController();
            logController.AddLog("Problem running Ajax Upload Method.", ex.ToString(), EventLogController.EventLogType.ADMIN_ALERT);
        }
    }
}

Как видите, const bytes = $ ("#upload_control ") [0] .files [0] .split ('base64,') [1]; выдаст ошибку.Я также не уверен, как использовать часть Использование в C # для создания файла в папке.Я посмотрел на метод Addfile, который использует DNN, но для этого требуется поток.

...