Как загрузить файл на странице aspx без использования веб-форм?

У меня есть страница aspx, в которой уже есть код для загрузки файла с использованием "asp:FileUpload" и веб-формы. В другом разделе страницы я хочу добавить функциональность для пользователя, чтобы загрузить файл. Но я не хочу использовать веб-формы или "asp:fileupload".

Итак, я создал HTML-файл, который я вставляю в виде iframe внутри тега div в aspx.

<div id="iUploadDoc" style="height:50px;">
<iframe name='FileUpload'   id='FileUpload' class='iUploadFrame' width='100%' frameborder='0' border='0'src='DocUpload.htm'></iframe></div>

Я установил для EnablePageMethods значение true.

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true">


И внутри HTML я сделал форму и с типом входного файла.

<form method="POST" action="DocDetail.aspx.cs" id="docUpload" enctype="multipart/form-data">
        <div>
            <label for="fileUpload" class="inputLabel">Upload File</label>
            <input type="file" id="fileUpload" name="files"/>

        </div>
    </form>
<div id="progUpload" style="display: none;">
            <p class="uploadBox">Uploading...</p>
        </div>
        <span id= "selectedFile" style="display: none;"></span><span id="fileName" style="display: none;"></span>

Теперь я не знаю, что добавить в "форму" действия. Сначала в iframe, ниже сценарий, который я написал:

window.onload = load;
function uploadDocFile() {  
    var prog = document.getElementById("progUpload");
    prog.style.cssText = 'display: block;';
    var x = document.getElementById("fileUpload");
    var txt = "";
    var filePath = "";
    var fileName = "";
    if (x.value == "") {
        txt += "Select a file.";
        document.getElementById("selectedFile").innerHTML = txt;
    } else {
        filePath = x.value;
        fileName = filePath.replace(/^.*[\\\/]/, '');
        txt += "<br>Selected file: ";
        document.getElementById("selectedFile").innerHTML = txt;
        document.getElementById("fileName").innerHTML = fileName;
    }

    var formInfo = document.getElementById("docUpload");
    document.getElementById("docUpload").style.display = "none";
    window.parent.getFormData(formInfo, x ,x.value, fileName);
}

function load() {
    var e = document.getElementById("fileUpload");
    //var formInfo = document.getElementById("docUpload");
    //fakeClick();
    e.onchange = function () {
        uploadDocFile();
    }
}

Затем на родительской странице ниже приведен скрипт, который я написал.

    DocUpload.prototype.uploadFileDoc= function (formInfo, uploadedFile, fileInfo, lastModifiedDate, name, extension, size, type) {
//blacklitsType is an array of types of file (similarly for blacklistExt) that should not be allowed to upload
if (indexOf.call(blackListType, type) < 0 && indexOf.call(blackListExt, extension) < 0) {    
var idParams = { OiD: ordId, pID: pId, QID: qId }
        var files = uploadedFile.files;
                    var fileEntries = [];
                    for (j = 0, len1 = files.length; j < len1; j++) {
                        file = files[j];
                        if (file.getAsEntry) {
                            entry = file.getAsEntry();
                        } else if (file.webkitGetAsEntry) {
                            entry = file.webkitGetAsEntry();
                        }
                        if (entry) {
                            isFyl = entry.isFile;
                            if (!isFyl) {
                                alert("You can not upload a folder. Uploading files (if present).");
                            } else {
                                fileItem = file.getAsFile();
                                fileEntries.push(fileItem);
                            }
                        } else if (!file.type && file.size % 4096 === 0) {
                            alert("You can not upload a folder. Uploading files (if present).");
                        } else {
                            fileEntries.push(file);
                        }
                    }


                PageMethods.UploadDocument(fileEntries[0], idParams, function (res) {
                    if (res == true) {
                        alert("File uploaded successfully.");                   
                    } else {                    
                        alert("File upload failed.");                   
                    }
                }, function (err) {
                    alert("ERROR: " + err._message);                
                });         

            } else {            
                window.alert('You cannot upload incorrect file types.');            
            }
            return;
        };

    DocUpload.prototype.getFormData = function (formInfo, uploadedFile, fileInfo, nameInfo) {
            var currDate, extension, lastModifiedDate, name, nameArr, size, type;
            currDate = new Date();
            lastModifiedDate = currDate;
            type = '';
            size = 512;
            name = nameInfo;
            nameArr = name.split(".");
            extension = nameArr[nameArr.length - 1];
            DocUpload.prototype.uploadFileDoc(formInfo, uploadedFile, fileInfo, lastModifiedDate, name, extension, size, type);
        };
    window.getFormData = DocUpload.prototype.getFormData;

Перенос атрибутов формы из iframe на родительскую страницу работает просто отлично. Но как я должен опубликовать его в виде файла, используя PageMethod. Ниже приведен метод page в моем коде:

    [System.Web.Services.WebMethod()]           
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = false)]
    public static bool UploadDocument(HttpPostedFileBase uploadedFile,IdParams idParams) {
    bool err = false;
    try{ 
//code 
err= true;}
    catch(Exception ex){err = false;}
    return err;
        }  

Независимо от того, сколько я пытался, я либо получаю сообщение об ошибке HTTPPostedFileBase, либо сериализация дочернего элемента запрещена. Ниже приведены только некоторые ошибки, которые я продолжаю получать (не одновременно):

No parameterless constructor System.Web.HttpPostedFileBase aspx, OR
The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter

Что я должен делать?

0 ответов

Другие вопросы по тегам