2015-12-12 47 views
0

使用canvas.toSVG如下所列:Creating a backing canvas with FabricJS我能到我的HTML5畫布轉換爲SVG數據,看起來像這樣通過調用canvas.toSVG():轉換SVG數據到SVG文件可以上傳

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> 
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="85.999967in" height="55.812440in" style="background-color: #ffffff" viewBox="0 0 650 421.84" xml:space="preserve"> 
<desc>Created with Fabric.js 1.6.0-rc.1</desc> 
<defs></defs> 
<g transform="translate(516.24 217.93) scale(0.47 0.47)"> 
<image xlink:href="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAyADIAAD/2wBDAAEBAQEBAQEBAQEBAQEB…lq4JVWvJFVClTiCkAAgF9IIBHyAQACB/oAf6+gMzMMVWDEN7kh5AkN0dEwR3++iCe/+ez9f//Z" x="-200" y="-193.5" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" width="400" height="387" preserveAspectRatio="none"></image> 
</g> 
</svg> 

但是,我需要能夠通過AJX或節點(即請求或Unirest)將.svg文件上傳到供應商API。

如何將上面的SVG/XML數據轉換爲可以保存然後上傳的SVG文件?

這就是我使用的.png,但是當我使用乘法器時,大的畫布升級會使瀏覽器崩潰,所以這就是爲什麼我試圖使用SVG。巴布亞新幾內亞自動Base64編碼,所以在節點解碼,傳輸到一個臨時目錄,然後貼如下:

客戶端:

// Multiply Canvas 
     var img = canvas.toDataURL({ 
      // Multiplier appears to accept decimals 
      format: 'png', 
      multiplier: 5   
}); 

$http.post('/postVendor', { filename: filename, file: img }).success(function (data) {... 

服務器端/節點:

app.post('/postVendor', function (req, res, next) { 

    var filename = req.body.filename; 
    var file = req.body.file; 
    var fileloc = 'upload/' + filename; 

    //var base64Data; 
    fileBuffer = decodeBase64Image(file); 

    fs.writeFileSync('upload/' + filename, fileBuffer.data); 

unirest.post('http://myvendorsAPI/ws/fileuploads') 
.headers({ 'Content-Type': 'multipart/form-data' }) 
.field('filename', filename)// Form field 
.attach('file', fileloc)// Attachment 
.end(function (response) { 
     console.log(response.body); 
     //fs.unlinkSync(fileloc); 
     res.send(response.body); 
    }); 
}) 

由於toSVG輸出XML,我將如何將其轉換爲SVG文件,以及如何上傳?

+2

XML *是一個SVG文件SVG是一個基於XML的文件格式 –

+1

但是,你將贏得你的畫布到這個svg:它只是一個包含在svg圖像元素中的畫布的JPEG版本,如果你想重新調整它,你將沒有png版本更多的好處。 – Kaiido

+0

我能夠將它作爲XML來推送。具有.svg擴展名的文件從什麼工作我可以說。它看起來很好,但我看到數據標籤是jpeg。如果/可以改變? – Kode

回答

1
var file = canvas.toSVG({ 
     // Multiplier appears to accept decimals 
     width: '200mm', 
     height: '300mm'  

});

$ http.post( '/ postVendor',{文件名: 'myfile.svg',文件:文件})。成功(功能(數據){...}

在服務器端沒有需要解碼base64編碼,因爲你只是上傳文本,urlencode從ajax應該就足夠了

+0

這樣做。看起來不錯! – Kode