gpt4 book ai didi

javascript - 将二进制数据发送到 servlet

转载 作者:行者123 更新时间:2023-11-30 18:38:29 25 4
gpt4 key购买 nike

我正在尝试将文件发送到 servlet。

function sendToServlet(){

var file = Components.classes["@mozilla.org/file/local;1"].
createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("C:\\Documents and Settings\\me\\Meus documentos\\Downloads\\music.mp3");

var boundary = "--------------" + (new Date).getTime();

var stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream);
stream.init(file, 0x04 | 0x08, 0644, 0x04); // file is an nsIFile instance


// Send
var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
req.open('POST', 'http://localhost:8080/app/server' , false);
var contentType = "multipart/form-data; boundary=" + boundary;
req.setRequestHeader("Content-Type", contentType);
req.send(stream);

}

javascript的来源: https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest#Sending_binary_data

但不起作用。

您好,这是使用的 serlevt 代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub

int size = 1024*20000;
long sizeFile = 0;
File savedFile = null;

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
} else {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(new Long("-1"));
List items = null;
try {
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();

try {

if (item.isFormField()) {
;
}else{

String itemName = item.getName();
int sizeName = itemName.length();
int end = itemName.indexOf('\n');
int start = itemName.lastIndexOf('\\');
itemName = itemName.substring(start + 1, sizeName-end-1);

savedFile = new File("C:\\Documents and Settings\\eric.silva\\Meus documentos\\"+itemName);
item.write(savedFile);
}

} catch (Exception e) {
e.printStackTrace();
}
}
}
}//metodo

但是当我尝试发送文件时,servlet 不会创建发送的文件。Quando eu tento enviar via javascript a requisição é enviada。 Mas o arquivo não é criado no lado do servidor。 Acredito que o código apresentado 没有站点 da MDN esteja incompleto。

当我尝试通过 javascript 发送请求时。但是该文件不是在服务器端创建的。我认为 MDN 站点上显示的代码不完整。

最佳答案

请注意您使用的示例代码是如何使用 PUT 方法发送数据的 - 有效的 multipart-formdata 请求需要一些额外的 header ,而不仅仅是文件本身。例如,您要发送的文件应该有一个名称(通常是表单域的名称)。你应该use a FormData object相反,它会自动生成一个有效的请求。你应该能够 create a File object直接地。沿着这些线的东西:

var file = File("C:\\Documents and Settings\\me\\Meus documentos\\Downloads\\music.mp3");
var data = new FormData();
data.append("file", file);
var req = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"]
.createInstance(Components.interfaces.nsIXMLHttpRequest);
req.open('POST', 'http://localhost:8080/app/server', false);
request.send(data);

请注意,只有从 Firefox 6 开始才支持像这样创建 File 对象。

关于javascript - 将二进制数据发送到 servlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7532226/

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