当前位置: 首页 > 知识库问答 >
问题:

如何使用servlet将图像上传到指定的项目文件夹?

司马宏邈
2023-03-14
<body>
    <form method="POST" action="FileUpload" enctype="multipart/form-data" >
        File:
        <input type="file" name="fileSrc"  > <br/>
        <input type="submit" value="Upload" name="upload" >
    </form>
</body>

这是我的uploadimg.jsp,当我单击Upload时,它会转到fileupload.java,上传的图像必须存储在我指定的文件夹AppImages中,我如何做到这一点?谢谢你的帮助。

共有1个答案

孟英叡
2023-03-14
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;


@WebServlet("/FileUploadServlet")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
             maxFileSize=1024*1024*10,      // 10MB
             maxRequestSize=1024*1024*50)

public class FileUploadServlet extends HttpServlet {
private static final String SAVE_DIR="images";

protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException, ClassNotFoundException, SQLException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
        String savePath = "C:" + File.separator + SAVE_DIR; //specify your path here
            File fileSaveDir=new File(savePath);
            if(!fileSaveDir.exists()){
                fileSaveDir.mkdir();
            }

        Part part=request.getPart("file");
        String fileName=extractFileName(part);
        part.write(savePath + File.separator + fileName);
       /* 
        //You need this loop if you submitted more than one file
        for (Part part : request.getParts()) {
        String fileName = extractFileName(part);
        part.write(savePath + File.separator + fileName);
    }*/
      //you can change this part acc. to your requirements
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/UploadFile","root","root");
        String query="INSERT INTO table_name(file) values (?)";

            PreparedStatement pst;
            pst=con.prepareStatement(query);

            String filePath= savePath + File.separator + fileName ;
            pst.setString(1,filePath);
            pst.executeUpdate();
}
// file name of the upload file is included in content-disposition header like this:
//form-data; name="dataFile"; filename="PHOTO.JPG"
private String extractFileName(Part part) {
    String contentDisp = part.getHeader("content-disposition");
    String[] items = contentDisp.split(";");
    for (String s : items) {
        if (s.trim().startsWith("filename")) {
            return s.substring(s.indexOf("=") + 2, s.length()-1);
        }
    }
    return "";
}
}

在这个servlet中,我们使用两个注释:@webservlet:标记这个servlet,以便servlet容器在启动时加载它,并将它映射到URL模式/fileuploadservlet。@multipartconfig:表示此servlet将处理多部分请求。我们限制上传文件的最大大小为16 MB。

来源

 类似资料:
  • 我可以上传图片在数据库,但不能上传到“文件”文件夹。万维网 这是图像上传servlet。一旦图像被上传,它就应该被插入到files文件夹中。我不知道我犯了什么错误。谁能告诉我出了什么问题吗?我需要添加上传目录或文件路径C:inside吗?

  • 我上传我的Laravel应用程序到C面板,我的公共内容是在public_html,我改变index.php公共到这个: 和其他文件在主根命名为热电偶 一切正常,但当我想上传一张图片,而不是上传到public_html时,一个带有public name的文件将在public_html之外的thermotajhiz文件中创建 我怎样才能解决这个问题? 我正在使用此插件上载文件: 文件管理器

  • 问题内容: 我正在上传base64字符串,但GraphQL挂起了。如果我将字符串切成少于50,000个字符,它将起作用。50,000个字符后,graphQL永远不会进入解析函数,但不会给出错误。在较小的字符串上,它可以正常工作。 问题答案: 此处的正确方法是使用AWS AppSync通过复杂类型执行实际的S3上传- 您在此处说明的内容看起来更像是您尝试将base64编码的图像作为字符串保存到字段中

  • 问题内容: 我在教授的申请中使用的是查看学生名单的位置,其中将包含照片和其他详细信息以及删除选项。我试图仔细做的所有事情。但是存在一个问题,即来自Firebase的照片无法加载到。有时它会加载一两张照片,然后停止加载照片。我正在加载应用程序时观察android Studio上的“运行”选项。然后我发现类似… 为什么这个问题发生在我身上,我真的还没有。拜托,帮我摆脱这个问题。 在寻找了很多东西之后,

  • 问题内容: 我正在使用Chrome驱动程序使用nightwatch.js运行前端测试。我需要测试图像上传是否正常工作,大概是通过提供的文件输入来进行的,因为在成功发布后会运行回调。 我知道可以使用Selenium Web驱动程序的sendKeys方法来完成。 您如何使用javascript和nightwatch.js完成此操作?您可以访问Selenium Webdriver或与其相关的界面吗? 问

  • 问题内容: 我在Eclipse中有想要上传到GitHub的代码,但到目前为止我还不知道该怎么做。它说“创建存储库”,但是看起来更像是一个存放项目的文件夹,我不确定如何将代码上传到其中。为看似愚蠢的问题道歉。另外,如何删除存储库?也没有一种方法可以做到这一点。 问题答案: 尽管Eclipse的EGit插件是一个不错的选择,但更好的选择是学习使用git bash -即从命令行使用git。学习git的基