首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >图像上传(Filepath) - JSP

图像上传(Filepath) - JSP
EN

Stack Overflow用户
提问于 2016-08-05 16:50:01
回答 1查看 165关注 0票数 0

我允许用户上传文件,以维护主机和获得一个链接回来。一切似乎都很正常。不管我用的是

字符串itemName = item.getName();

它在Internet和Eclipse浏览器中工作得很好。然而,当谈到firefox和chrome时,由于浏览器安全性的原因,输入字段中只检索到文件名,所以没有。有什么办法能让它发挥作用呢?

我的代码:-

代码语言:javascript
复制
private void processlist(HttpServletRequest request, 
    HttpServletResponse response) {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
        } else {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            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();
                if (item.isFormField()) {
                } else {
                    try {
                        String itemName = item.getName();


                        BufferedImage img = null;
                        try {
                            img = ImageIO.read(new File(itemName));
                        } catch (IOException e) {
                        }

                        String IMGUR_POST_URI = "https://api.imgur.com/3/upload";
                        String IMGUR_API_KEY = "mykeyyyyyyyyyyyy";
                        String projectname = "";
                        try {
                            ByteArrayOutputStream baos = new ByteArrayOutputStream();
                            System.out.println("Writing image...");
                            ImageIO.write(img, "png", baos);
                            URL url = new URL(IMGUR_POST_URI);

                            System.out.println("Encoding...");
                            String data = URLEncoder.encode("image", "UTF-8") + "=" + URLEncoder
                                    .encode(Base64.encodeBase64String(baos.toByteArray()).toString(), "UTF-8");
                            data += "&" + URLEncoder.encode("key", "UTF-8") + "="
                                    + URLEncoder.encode(IMGUR_API_KEY, "UTF-8");

                            System.out.println("Connecting...");
                            URLConnection conn = url.openConnection();
                            conn.setDoOutput(true);
                            conn.setDoInput(true);
                            conn.setRequestProperty("Authorization", "Client-ID " + IMGUR_API_KEY);
                            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());

                            System.out.println("Sending data...");
                            wr.write(data);
                            wr.flush();

                            System.out.println("Finished.");

                            // just display the raw response
                            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                            String line;
                            while ((line = in.readLine()) != null) {
                                JSONObject jObject = new JSONObject(line);
                                JSONObject data1 = jObject.getJSONObject("data");
                                projectname = data1.getString("link");
                                if (flagAccessed == false) {
                                    img1 = projectname;
                                } else {
                                    img2 = projectname;
                                }
                                System.out.print(projectname);

我的JSP代码是一个简单的表单:-

代码语言:javascript
复制
<form action="UploadServlet" method="post" enctype="multipart/form-data" name="form1" id="form1" style="text-align:center;display:inline;">
<table border="1" style="text-align:center;">
                        <td><center>
                                Select image1: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12">
                            </center></td>
                    </tr>

                    <tr>
                        <td><center>
                                Select image2: <input name="file" type="file" id="file" class="btn btn-dark btn-lg12">
                            </center></td>
                    </tr>
                    <tr>
                        <td align="center" style="margin-top: 5px;"></td>
                    </tr>

                </table>


            <br>
            <br>
            <input type="submit" name="Submit" value="Submit files" class="btn btn-dark btn-lg"/>

            </form>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-05 18:57:00

总结一下修复:将img = ImageIO.read(new File(itemName));更改为使用img = ImageIO.read(item.getInputStream());允许服务器访问映像的InputStream。即使Internet Explorer在FileItem的名称中提供了完整的文件路径,但它只能在文件位于服务器和客户端(例如开发环境)上完全相同的位置的环境中工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38794219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档