小编oli*_*her的帖子

XMLHttpRequest:使用XML和图像作为有效负载的多部分/相关POST

我正在尝试从Chrome扩展程序中将图像(使用元数据)发布到Picasa Webalbums.请注意,正如我在此处所述,Content-Type image/xyz的常规帖子有效.但是,我希望包含描述/关键字,协议规范描述了带有XML和数据部分的多部分/相关格式.

我通过HTML5 FileReader和用户文件输入获取数据.我使用检索二进制字符串

FileReader.readAsBinaryString(file);
Run Code Online (Sandbox Code Playgroud)

一旦FileReader加载了字符串,假设这是我的回调代码:

function upload_to_album(binaryString, filetype, albumid) {

    var method = 'POST';
    var url = 'http://picasaweb.google.com/data/feed/api/user/default/albumid/' + albumid;
    var request = gen_multipart('Title', 'Description', binaryString, filetype);
    var xhr = new XMLHttpRequest();
    xhr.open(method, url, true);
    xhr.setRequestHeader("GData-Version", '3.0');
    xhr.setRequestHeader("Content-Type",  'multipart/related; boundary="END_OF_PART"');
    xhr.setRequestHeader("MIME-version", "1.0");
    // Add OAuth Token
    xhr.setRequestHeader("Authorization", oauth.getAuthorizationHeader(url, method, ''));
    xhr.onreadystatechange = function(data) {
        if (xhr.readyState == 4) {
            // .. handle response
        }
    };
    xhr.send(request);
}   
Run Code Online (Sandbox Code Playgroud)

gen_multipart函数只是从输入值和XML模板生成多部分,并生成与规范完全相同的输出(除了..binary图像数据..),但为了完整起见,这里是:

function gen_multipart(title, …
Run Code Online (Sandbox Code Playgroud)

javascript picasa xmlhttprequest google-chrome-extension

12
推荐指数
1
解决办法
1万
查看次数

在模型更改时刷新 CKEditor5 小部件

我有一个带有文本属性节点的自定义架构元素,该元素呈现为以下组件的小部件editingDowncast

conversion.for( 'editingDowncast' )
  .add( downcastElementToElement({
    model: 'myModelElement',
    view: (modelElement, viewWriter) => {
      return createMyModelWidget( modelElement, viewWriter, 'Label' );
    }
  } )
);

function createMyModelWidget( modelElement, writer, label ) {
  const content = modelElement.getAttribute('content')
  const placeholder = writer.createText( content );
  const container = writer.createContainerElement( 'div', { class: 'my-model-element--widget' } );

  writer.insert( ViewPosition.createAt( container ), placeholder );
  return toWidget( container, writer, label );
}
Run Code Online (Sandbox Code Playgroud)

通过一些外部事件(例如,来自配置小部件的外部模式的结果),使用 更新属性model.change

model.change(writer => {
  writer.setAttribute( 'attribute', 'whatever', widget );
  writer.setAttribute( 'content', 'new …
Run Code Online (Sandbox Code Playgroud)

widget ckeditor5

3
推荐指数
1
解决办法
1202
查看次数