Saltar al contenido

Sharepoint: no se puede cargar un archivo que no sea de texto en la aplicación de SharePoint a través de la API REST

Puede que se de el caso de que encuentres alguna incompatibilidad en tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al trabajo final.

Pude agregar un archivo con SP.RequestExecutor

<%-- _lcid="1033" _version="15.0.4128" _dal="1" --%>
<%-- _LocalBinding --%>
<%@ Page language="C#" MasterPageFile="~masterurl/default.master"    Inherits="Microsoft.SharePoint.WebPartPages.WebPartPage,Microsoft.SharePoint,Version=15.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" meta:progid="SharePoint.WebPartPage.Document" meta:webpartpageexpansion="full"  %>
<%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Import Namespace="Microsoft.SharePoint" %> <%@ Assembly Name="Microsoft.Web.CommandUI, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %>






       


Después de leer y jugar mucho, se me ocurrió configurar los datos attribute al archivo y processData a false. Esto funcionó muy bien, excepto por el dropfile que no es compatible con readAsArrayBuffer.

Así que utilicé la función convertDataURIToBinary anterior. Ahora tengo esto y funciona muy bien. Observaciones: files.data se agrega en el evento de carga y tuve que convertirlo en async al adjuntar varios archivos a un listitem.

jQuery.ajax(
    url: listUrl + "/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')",
    type: "POST",
    async: false,
    processData: false,
    headers: 
        "accept": "application/json;odata=verbose",
        "X-RequestDigest": jQuery("#__REQUESTDIGEST").val()
    ,
    data: convertDataURIToBinary(file.data),
    success: function(e)  _.log(_.logType.verbose, "File uploaded: " + e); ,
    error: function(e)  _.log(_.logType.warning, "File not uploaded: " + e); 
);

var convertDataURIToBinary = function(dataURI) 
    var base64Marker = ";base64,";
    var base64Index = dataURI.indexOf(base64Marker) + base64Marker.length;
    var base64 = dataURI.substring(base64Index);
    var raw = window.atob(base64);
    var rawLength = raw.length;
    var array = new window.Uint8Array(new window.ArrayBuffer(rawLength));

    for (i = 0; i < rawLength; i++) 
        array[i] = raw.charCodeAt(i);
    
    return array;
;

var filesDropped = function (e) 
    e = e ;

var fileLoaded = function (fileOnloadEvent) 
    this.file.data = fileOnloadEvent.target.result;
    var filename = this.file.name.toLowerCase();
    jQuery(vm.files()).each(function (fIndex, fElement) 
        if (fElement.name.toLowerCase() === filename)
            vm.removeFile(fElement);
    );
    vm.files.push(this.file);
;

Te mostramos reseñas y puntuaciones

Si entiendes que te ha sido de utilidad nuestro post, sería de mucha ayuda si lo compartes con otros desarrolladores de este modo nos ayudas a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *