2017-08-30 15 views
0

私はリストアイテムにファイルをアップロードする機能を持っています。すべてが.PNGのために働いているが、私はPDFファイルをアップロードしようとしているとき、私は、エラーオブジェクトのエラーnet::ERR_CONNECTION_RESETSharepoint AddInアップロード.PDF SP REST API

画面があります。

error

をマイコード:

function uploadFile(listName, itemId, fileName, file) { 
    uploadFileSP(listName, itemId, fileName, file) 
    .then(function (files) { 
     //success 
    }, function (sender, args) { 
     alert('error: ' + args.get_message()); 
    }); 
} 

function getFileBuffer(file) { 
    var deferred = $.Deferred(); 
    var reader = new FileReader(); 
     reader.onload = function (e) { 
     deferred.resolve(e.target.result); 
    } 
    reader.onerror = function (e) { 
     deferred.reject(e.target.error); 
    } 
    reader.readAsArrayBuffer(file); 
    return deferred.promise(); 
} 

function uploadFileSP(listName, id, fileName, file) { 
    var deferred = $.Deferred(); 
    getFileBuffer(file) 
    .then(function (buffer) { 
     var bytes = new Uint8Array(buffer); 
     var content = new SP.Base64EncodedByteArray(); 
     var binary = ''; 
     for (var b = 0; b < bytes.length; b++) { 
      binary += String.fromCharCode(bytes[b]); 
     } 
     console.log(binary); 
     executor.executeAsync({ 
      url: appweburl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + id + ")/AttachmentFiles/add(FileName='" + file.name + "')", 
      method: "POST", 
      binaryStringRequestBody: true, 
      body: binary, 
      success: function (data) { alert('Pomyślnie dodano fakturę!'); window.location.replace("http://sharepoint-dev.ampliapps.com/FakturyBPNT-SharePoint-Hosted/Lists/Faktury/AllItems.aspx");}, 
      error: function (err) { alert('Wystąpił błąd podczas wprowadzania faktury.'); console.log(err); }, 
      state: "Update" 
     }) 
    }, function (error) { deferred.reject(error); }); 
    return deferred.promise(); 
} 

として、私は前に言った、それは例えば.pngのために働く。

+0

バッファにし、コンテンツに何が必要何ですか? –

+0

私はcontent-lengthヘッダーを追加したときに動作しますが、ほとんどのブラウザーでこのヘッダーを使用することはできません。 (firefoxでチェック) –

+0

ok良い、試してみてくださいcontentType –

答えて

0

これは、あなたが

function uploadDocument(contents, targetPath, successHandler, failedHandler) { 

var fileName = getFilenameFromUrl(targetPath); 
var fileNameEvidence = fileName; 
var folderName = getPathFromUrl(targetPath); 
var hostWebUrl = ''; 
var appWebUrl = ''; 

hostWebUrl = decodeURIComponent(getQueryStringParameter('SPHostUrl')); 
appWebUrl = decodeURIComponent(getQueryStringParameter('SPAppWebUrl')); 

$.getScript(hostWebUrl + "/_layouts/15/SP.RequestExecutor.js", function() { 
    console.log("into upload Api Document"); 
    var byteArray = new Uint8Array(atob(contents).split("").map(function (c) { 
     return c.charCodeAt(0); 
    })); 
    var fileData = ''; 

    for (var i = 0; i < byteArray.byteLength; i++) { 
     fileData += String.fromCharCode(byteArray[i]); 
    } 
    var reqDocExecutor = new SP.RequestExecutor(appWebUrl); 

    var _url = ''; 
    var contentType = "application/pdf;odata=verbose"; 

    var dotLocation = fileName.lastIndexOf('.'); 
    var extensionFile = fileName.substr(dotLocation); 

    var info; 
    _url = String.format("{0}/_api/sp.appcontextsite(@target)/web/GetFolderByServerRelativeUrl('{1}')/files" + "/add(overwrite=true, url='{2}')[email protected]='{3}'", appWebUrl, folderName, fileName, hostWebUrl); 
    info = { 
     url: _url, 
     method: "POST", 
     headers: { 
      "Accept": "application/pdf; odata=verbose", 
      "X-RequestDigest": $("#__REQUESTDIGEST").val() 
     }, 
     contentType: contentType, 
     processData: false, 
     binaryStringRequestBody: true, 
     body: fileData, 
     success: function (x, y, z) { 
      successHandler(); 
     }, 
     error: function (x, y, z) { 
      console.log('failed to upload document'); 
      failedHandler(); 

     } 
    }; 
    reqDocExecutor.executeAsync(info); 
}); 

} 
+0

いいえ、ヘッダーはヘルプを追加しませんでした。 –

+0

私は完全なコードを追加しましょう –

+0

あなたはURLを変更する必要があるかもしれませんが、このコードはうまく動作します –

関連する問題