Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在html5和java中实现拖放?_Java_Jquery_Drag And Drop - Fatal编程技术网

如何在html5和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')

所以基本上我需要实现一个拖放功能到我的一个简单项目中。我找到了一个很好的教程,但问题是他的服务器端代码是用php编写的,而我的是用java编写的。我确实用java实现了我的服务器端,但在最后打开文件时,它说它已损坏

以下是我正在做的: 客户端:

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你知道自己很难弄清楚所有的事情,谢谢兄弟,它工作得很好