Как я могу получить данные байтового массива из типа ввода загрузки файла, используя 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, но для этого требуется поток.