我上传了视频类型文件,它通过异步方式将它们保存在服务器上,但目前视频大于 5MB,它不适合我(它不能成为限制,因为我已经分配到 120MB),我已经找到了问题的位置,并且在我分配给我拥有的变量的那一刻FormData()
,我留下了操作代码:
JavaScript
//Funcion asincrona
async function GuardarNuevoDocumento() {
r1 = await GuardarDocumento();
r2 = await GuardarTodo(r1);
}
function GuardarDocumento() {
try {
var tipo = $('#Tipo').val();
var urlDoc = 'FuncionControlador';
var campoDoc = 'idInput';
var data = new FormData();
var files = $("#" + campoDoc).get(0).files;
if (files.length > 0) {
//Si el archivo es mayor a 5 MB data continua siendo un
//FormData vacio, el append no lo realiza
data.append("file", files[0]);
}
var ajaxRequest = $.ajax({
type: "POST",
url: urlDoc,
contentType: false,
processData: false,
data: data,
success: function () {
console.log("fin");
},
error: function(e){
console.log(e);
}
});
} catch(e) {
console.log(e)
}
return ajaxRequest;
}
//ENVIAR AL CONTROLADOR
function GuardarTodo(r1) {
//Variables de otros inputs
var nombre = $('#Nombre').val();
var descripcion = $('#Descripcion').val();
var tipo = $('#Tipo').val();
//Declaro el archivo
var documento = r1;
if (documento == "") {
//popup error
avisos.error("Video", "El video no ha podido ser guardado");
} else {
//GUARDAR VIDEO(No es la función real, esta compilado de cabeza,
//funciona bien la real)
var data = [{"Nombre": nombre, "Descripcion":descripcion, "Tipo":tipo, "Documento": documento}]
$.ajax({
type: "POST",
url: "URL",
contentType: false,
processData: false,
data: data
});
}
}
C#
[HttpPost]
public ActionResult MultimediaUpload()
{
try
{
var path = "";
if (Request.Files.Count > 0)
{
path = PdfUpload(Request.Files[0], "RUTA");
}
return Content(path);
}
catch (Exception e)
{
//LOG
_log.Error(e);
return null;
}
}
public string PdfUpload(HttpPostedFileBase file, string ruta)
{
if (file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
string path = Path.Combine(ruta, fileName);
file.SaveAs(path);
return path;
}
else
return null;
}
现在有了所有代码,我知道作为一个繁重的文件,我需要执行一些任务,以便暂停脚本的执行,直到文件加载到数据中,我尝试过:
data.append("file", files[0]).then(ajaxRequest);
还有setTimeout,但是有了这个,不管你放多长时间,它都会线性执行而不会暂停。
我该如何做到这一点,无论我分配的视频大小如何?
我不知道IIS和.NET是如何工作的,但考虑到:
在PHP中,必须在配置文件中修改两个变量
php.ini
,一个用于增加每个表单上传的数据量post_max_size
,另一个用于最大文件大小upload_max_filesize
。并搜索了一下,我发现了需要修改的选项
web.config
:第一个限制 POST 接收的缓冲区的大小,第二个限制运行时最终应用于发送文件的请求的最大大小。
这两个设置应直接设置为字节数,在您的情况下为 106954752 / 1024 / 1024 = 102mb
注意:您可能需要增加它
executionTimeout
以防止上传大文件过期;不幸的是,它没有设置为零的选项(如在PHP中)以避免限制,因此您必须测试以确定您要分配的最终值(以秒为单位)。