如何在html5和java中实现拖放?
所以基本上我需要实现一个拖放功能到我的一个简单项目中。我找到了一个很好的教程,但问题是他的服务器端代码是用php编写的,而我的是用java编写的。我确实用java实现了我的服务器端,但在最后打开文件时,它说它已损坏 以下是我正在做的: 客户端:如何在html5和java中实现拖放?,java,jquery,drag-and-drop,Java,Jquery,Drag And Drop,所以基本上我需要实现一个拖放功能到我的一个简单项目中。我找到了一个很好的教程,但问题是他的服务器端代码是用php编写的,而我的是用java编写的。我确实用java实现了我的服务器端,但在最后打开文件时,它说它已损坏 以下是我正在做的: 客户端: obj.on('dragover', function(e){ e.stopPropagation(); e.preventDefault(); $(this).css('border', '2px solid #16a085')
obj.on('dragover', function(e){
e.stopPropagation();
e.preventDefault();
$(this).css('border', '2px solid #16a085');
});
obj.on('drop', function(e){
e.stopPropagation();
e.preventDefault();
$(this).css('border', '2px solid #16a085');
var files=e.originalEvent.dataTransfer.files;
var file=files[0];
upload(file);
});
function upload(file){
xhr=new XMLHttpRequest();
xhr.open('post','../servlet',true);
xhr.setRequestHeader('Content-Type', 'multipart/form-data');
xhr.setRequestHeader('X-File-Name',file.fileName);
xhr.setRequestHeader('x-File-Size',file.fileSize);
xhr.setRequestHeader('X-File-Type',file.fileType);
xhr.send(file);
}
服务器端:
String datareceived = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
PrintWriter out = response.getWriter();
System.out.println(datareceived);
byte data[] = datareceived.getBytes();
FileOutputStream output = new FileOutputStream("C:/new/im.jpg");
output.write(data);
output.close();
将原始文件和上载的文件与notepad++进行比较时,我注意到上载的文件已将行尾
替换为?
。我也试过了
String DecodedData = java.net.URLDecoder.decode(datareceived, "UTF-8");
除此之外,我还尝试:
for(Part p : request.getParts() ) {
InputStream filecontent = null;
OutputStream output = null;
output = new FileOutputStream(new File("C:/new/im.jpg"));
filecontent = p.getInputStream();
final byte[] bytes = new byte[1024];
int read = 0;
while((read = filecontent.read(bytes))!=-1){
output.write(bytes,0,read);
}
output.close();
}
但这是一个例外,说:
java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为未找到多部分边界
位于org.apache.catalina.connector.Request.parseParts(Request.java:2863)
位于org.apache.catalina.connector.Request.getParts(Request.java:2699)
位于org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1096)
在duck.reg.pack.uploadtostack.doPost(uploadtostack.java:25)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
位于org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
位于org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
位于org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
位于org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
位于org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
位于org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
位于org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
位于org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
位于org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
位于org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
位于org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
运行(Thread.java:745)
原因:org.apache.tomcat.util.http.fileupload.FileUploadException:请求被拒绝,因为未找到多部分边界
位于org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:840)
位于org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)
位于org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)
位于org.apache.catalina.connector.Request.parseParts(Request.java:2791)
... 还有27个
但这给了我一个非法的例外。我真的不知道我做错了什么,如果有人告诉我什么是正确的方法,我会非常感激。
提前感谢:)由于请求的内容类型是
多部分/表单数据
,因此您需要以该格式读取请求。使用,而不是getReader。我假设第一部分是要保存的数据;用于将其保存到文件中。感谢回复兄弟。它尝试了你说的方式,但这给了我一个例外。你可以在我的问题中读到它,我刚刚更新了它。我没有直接从客户端进行AJAX调用的经验,但是说send(file)
只使用该文件作为消息的主体;它不会将其添加为多部分/表单数据部分。我会避免设置内容类型,忘记使用getParts(),而直接将请求的InputStream复制到文件中。请勿使用读取器读取二进制数据@VGR您知道自己很难弄清楚所有的事情,感谢兄弟它工作得很好(“"”),因为请求的内容类型是multipart/form data
,所以您需要以该格式读取请求。使用,而不是getReader。我假设第一部分是要保存的数据;用于将其保存到文件中。感谢回复兄弟。它尝试了你说的方式,但这给了我一个例外。你可以在我的问题中读到它,我刚刚更新了它。我没有直接从客户端进行AJAX调用的经验,但是说send(file)
只使用该文件作为消息的主体;它不会将其添加为多部分/表单数据部分。我会避免设置内容类型,忘记使用getParts(),而直接将请求的InputStream复制到文件中。请勿使用读取器读取二进制数据@VGR你知道自己很难弄清楚所有的事情,谢谢兄弟,它工作得很好