上传pdf文件 [英] uploading of pdf file

查看:28
本文介绍了上传pdf文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用下面给出的代码上传 pdf 文件.它提供浏览功能但不上传文件.当我单击 sendfile 按钮时,它会显示 uploadfile.html 代码页.我怎样才能做到这一点???给定代码中的错误在哪里???

i want to upload a pdf file by using code given below.It give browsing facility but dont upload file. When i click sendfile button Its display uploadfile.html code page. How can i do that??? where is the error in the given code???

文件名-upload.html

filename-upload.html

<%@ page language="java" %>
<HTml>
<HEAD><TITLE>Display file upload form to the user</TITLE></HEAD>  
<% //  for uploading the file we used Encrypt type of multipart/
form-data and input of file type to browse and submit the file %>
  <BODY> <FORM  ENCTYPE="multipart/form-data" ACTION=
"uploadfile.html" METHOD=POST>
        <br><br><br>
      <center><table border="2" >
                    <tr><center><td colspan="2"><p align=
"center"><B>PROGRAM FOR UPLOADING THE FILE</B><center></td></tr>
                    <tr><td><b>Choose the file To Upload:</b>
</td>
                    <td><INPUT NAME="F1" TYPE="file"></td></tr>
                    <tr><td colspan="2">
<p align="right"><INPUT TYPE="submit" VALUE="Send File" ></p></td></tr>
             <table>
     </center>      
     </FORM>
</BODY>
</HTML>

文件名--uploadfile.html

filename--uploadfile.html

<%@ page import="java.io.*" %>
<%
    //to get the content type information from JSP Request Header
    String contentType = request.getContentType();
    //here we are checking the content type is not equal to Null and
 as well as the passed data from mulitpart/form-data is greater than or
 equal to 0
    if ((contentType != null) && (contentType.indexOf("multipart/
form-data") >= 0)) {
        DataInputStream in = new DataInputStream(request.
getInputStream());
        //we are taking the length of Content type data
        int formDataLength = request.getContentLength();
        byte dataBytes[] = new byte[formDataLength];
        int byteRead = 0;
        int totalBytesRead = 0;
        //this loop converting the uploaded file into byte code
        while (totalBytesRead < formDataLength) {
            byteRead = in.read(dataBytes, totalBytesRead, 
formDataLength);
            totalBytesRead += byteRead;
            }

        String file = new String(dataBytes);
        //for saving the file name
        String saveFile = file.substring(file.indexOf("filename=
"") + 10);
        saveFile = saveFile.substring(0, saveFile.indexOf("
"));
        saveFile = saveFile.substring(saveFile.lastIndexOf("\")
 + 1,saveFile.indexOf("""));
        int lastIndex = contentType.lastIndexOf("=");
        String boundary = contentType.substring(lastIndex + 1,
contentType.length());
        int pos;
        //extracting the index of file 
        pos = file.indexOf("filename="");
        pos = file.indexOf("
", pos) + 1;
        pos = file.indexOf("
", pos) + 1;
        pos = file.indexOf("
", pos) + 1;
        int boundaryLocation = file.indexOf(boundary, pos) - 4;
        int startPos = ((file.substring(0, pos)).getBytes()).length;
        int endPos = ((file.substring(0, boundaryLocation))
.getBytes()).length;

        // creating a new file with the same name and writing the 
content in new file
        FileOutputStream fileOut = new FileOutputStream(saveFile);
        fileOut.write(dataBytes, startPos, (endPos - startPos));
        fileOut.flush();
        fileOut.close();

        %><Br><table border="2"><tr><td><b>You have successfully
 upload the file by the name of:</b>
        <% out.println(saveFile); %></td></tr></table> <%
        }
%>

推荐答案

这显然是一个Roseindia 代码片段.首先,它是最差的 学习资源.不要使用它.它只教坏做法.将该站点添加到您的黑名单.事实上,任何充斥着广告横幅和过时的低质量代码片段的教程"网站显然都是由业余爱好者维护的,主要关注广告收入而不是认真的教学.此类垃圾教程"站点的其他示例包括 javabeat、tutorialspoint、journaldev、javatpoint 等.这些站点的显着共同点是它们起源于印度.

This is clearly a Roseindia code snippet. First of all, it is the worst learning resource ever. Don't use it. It only teaches bad practices. Add that site to your blacklist. In fact, any "tutorial" site which is littered with advertisement banners and hopelessly outdated low quality code snippets are clearly maintained by amateurs with primary focus on advertisement income instead of on serious teaching. Other examples of such crap "tutorial" sites are javabeat, tutorialspoint, journaldev, javatpoint, etc. Remarkable common thing which those sites have is that they are originated in India.

除了您错误地使用了 .html 文件扩展名而不是 .jsp(即使他们使用 .jsp 正确展示了他们的示例)> 扩展),代码片段有几个主要问题:

Apart from the fact that you incorrectly used .html file extension instead of .jsp (even though they presented their examples correctly with .jsp extensions), there are several major problems with the code snippet:

  • HTML 使用 90 年代风格的大写标签.这是不鼓励的.
  • HTML 正在使用
    标签,这些标签自 1998 年起已弃用.
  • 业务逻辑与表示逻辑混合在一个 JSP 文件中.Java 代码属于 Java 类,而不属于 JSP 文件.
  • 解析器依赖于本身并不总是存在的 Content-Length 请求标头.如果没有此标头,则代码会中断.
  • 解析器正在创建该长度的字节数组.当内容长度大于可用的服务器内存时,这可能会导致服务器崩溃.
  • 解析器正在使用服务器平台默认字符编码而不是多部分标头中指定的字符编码基于字节数组创建一个 String.这可能会导致结果字节畸形/损坏.
  • DataInputStream 包装器是不必要的,代码没有利用它.
  • 等等.
  • 等等.
  • The HTML is using '90s style uppercased tags. This is discouraged.
  • The HTML is using <font> and <center> tags which are deprecated since 1998.
  • The business logic is mingled with the presentation logic in a single JSP file. The Java code belongs in a Java class, not in a JSP file.
  • The parser is relying on Content-Length request header which is not always present per se. If this header is absent, the code breaks.
  • The parser is creating a byte array of that length. This may crash the server when the content length is larger than available server memory.
  • The parser is creating a String based on the byte array using server platform default character encoding instead of the one specified in multi part header. This may malform/corrupt the result bytes.
  • The DataInputStream wrapper is unnecessary, the code is not taking any benefit of it.
  • Etc..
  • Etc..

简直太可怕了.

从 JSP 上传文件的正确方法是将表单提交给带有 @MultipartConfig 注释的 servlet 类,然后使用 request.getPart() 获取文件.你可以在这个答案中找到一个片段:How to upload files to server using JSP/小服务程序?

The right way to upload a file from JSP is to submit the form to a @MultipartConfig annotated servlet class and then use request.getPart() to get the file. You can find a snippet in this answer: How to upload files to server using JSP/Servlet?

此答案详细说明了学习 Java EE 的正确方法:Java EE Web 开发,我从哪里开始,我需要什么技能?

The right way to learn Java EE is elaborated in this answer: Java EE web development, where do I start and what skills do I need?

这篇关于上传pdf文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆