gpt4 book ai didi

javascript - 附加SDK : WebDAV upload from addon

转载 作者:行者123 更新时间:2023-12-03 12:37:42 25 4
gpt4 key购买 nike

我正在尝试将文件上传到 WebDAC 服务器。 iLocalFile 是对本地输入文件的引用:

  var inputStream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
inputStream.init(iLocalFile, DELETE_ON_CLOSE, 0, 0);

var oIOService = Cc["@mozilla.org/network/io-service;1"]
.getService(Ci.nsIIOService)
var oHttpChannel = oIOService.newChannel(sRemoteFileName, "", null);
oHttpChannel.QueryInterface(Ci.nsIHttpChannel);
oHttpChannel.requestMethod = 'PUT';
oHttpChannel.QueryInterface(Ci.nsIUploadChannel);
oHttpChannel.setUploadStream(inputStream, 'application/pdf', -1);

var result = '';
console.log('Upload starting')
oHttpChannel.asyncOpen(in nsIStreamListener, result);

我的问题是我不知道如何实现 nsIStreamListener。如果失败/成功仍然可用,我会很乐意丢弃响应内容。

<小时/>

编辑 1:解决方案

根据所选答案进行以下修改:

  var inputStream = Cc["@mozilla.org/network/file-input-stream;1"]
.createInstance(Ci.nsIFileInputStream);
inputStream.init(iLocalFile, -1, 0, 0);
xhr.send(inputStream);

最佳答案

如果您的 WebDAV 服务器只需放置即可(无锁)...

我只使用 XMLHttpRequest,因为它提供了比原始流更高级别的 API(并且还避免了一些性能/快速性缺陷)。只需准备使用类似 xhr.send(File(iLocalFile.path)) 的内容即可。

如果您仍然想使用原始 channel 和流监听器:

Cu.import("resource://gre/modules/XPCOMUtils.jsm");
let listener = {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIStreamListener]),
onStartRequest: function(aRequest, aContext) {
// request started
},
onDataAvailable: function(aRequest, aContext, aInputStream, aOffset, aSize) {
// responseData. May be called multiple times!
// You probably need to buffer the data from the input stream
// if you're interested in the response text and manually convert
// it afterwards.
// E.g. wrap in nsIBinaryInputStream and .readArrayBuffer()
// + TextDecoder in onStopRequest.
},
onStopRequest: function(aRequest, aContext, aStatusCode) {
// request done. aStatusCode is an nsresult, not the http code ;)
//You may want to check this with Components.isSuccessCode
}
};

其中 aRequest 是 QI'ed 到 nsIRequest 的原始或重定向 channel (您可以再次将其 QI 到 nsIChannel 等)。其中 aContext 是传递给 asyncOpen 的上下文参数(第二个)。既然我们已经做到了:你不能真正在那里传递字符串。 null 就可以了(让你的听众跟踪内容)。

关于javascript - 附加SDK : WebDAV upload from addon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23659949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com