复制
收藏
提问
简洁

public void downloadNew(HttpServletResponse response) throws IOException { String fileName = request.getParameter("fileName").toString(); String uploadingType = request.getParameter("uploadingType").toString(); //图片在服务器本地 if (uploadingType.equals(1)) { //获得第一个点的位置 int index = fileName.indexOf("/"); //根据第一个点的位置 获得第二个点的位置 index = fileName.indexOf("/", index + 1); //根据第二个点的位置,截取 字符串。得到结果 result String result = fileName.substring(index + 1); File file = new File(filePatheGetPicPaht + result); if (file.exists()) { response.setContentType("application/octet-stream"); response.setHeader("content-type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(result, "utf8")); byte[] buffer = new byte[1024]; //输出流 OutputStream os = null; try (FileInputStream fis = new FileInputStream(file); BufferedInputStream bis = new BufferedInputStream(fis);) { os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer); i = bis.read(buffer); } } catch (Exception e) { e.printStackTrace(); } } else { response.setContentType("text/html; charset=UTF-8"); //转码 PrintWriter out = response.getWriter(); out.flush(); out.println("<script defer='defer' type='text/javascript'>"); out.println("alert('文件不存在或已经被删除!');"); out.println("window.location.href='/page/system/advertising/html/advertisingList.html';"); out.println("</script>"); } } else { //图片在OSS InputStream inputStream = fileUploadUtil.getInputStream(fileName); response.setContentType("application/octet-stream"); response.setHeader("content-type", "application/octet-stream"); response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "utf8")); byte[] buffer = new byte[1024]; //输出流 OutputStream os = null; try (BufferedInputStream bis = new BufferedInputStream(inputStream)) { os = response.getOutputStream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer); i = bis.read(buffer); } } catch (Exception e) { e.printStackTrace(); } inputStream.close(); } }这段代码有问题吗,可以从oss下载图片吗

72a2ed3e7
1个月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

这段Java代码是一个用于从服务器本地或对象存储服务(OSS)下载文件的方法。代码中有几个关键点需要注意:

  1. 参数检查request 对象没有在方法签名中定义,你需要确保在调用这个方法之前,request 对象已经被正确地传递到方法中。

  2. 异常处理:方法中使用了 try-catch 来处理可能发生的异常,这是一个好习惯。但是,catch 块中只是打印了异常堆栈,这可能不足以处理所有情况。你可能需要根据异常类型做更详细的错误处理。

  3. 文件存在性检查:在从服务器本地下载文件时,代码检查了文件是否存在,如果不存在,则返回了一个JavaScript alert和重定向。这是合理的,但确保 filePatheGetPicPaht 变量已经被正确设置。

  4. 文件下载:无论是从本地还是OSS下载,代码都使用了 BufferedInputStreamresponse.getOutputStream() 来传输数据。这是正确的方法。

  5. 编码问题:使用 URLEncoder.encode 来处理文件名的编码,这是为了防止文件名中的特殊字符导致的问题。

  6. OSS下载:对于OSS下载部分,代码调用了 fileUploadUtil.getInputStream(fileName) 来获取输入流。这部分的关键在于 fileUploadUtil 的实现,确保这个方法能够正确地从OSS获取文件输入流。

  7. 资源关闭:在 else 分支中,inputStream.close() 被调用,但最好使用 try-with-resources 语句来自动管理资源,这样可以避免在发生异常时资源没有被正确关闭。

  8. HTTP头设置response.setContentType("application/octet-stream");response.setHeader("content-type", "application/octet-stream"); 被设置了两次,实际上只需要设置一次。

  9. 错误处理:如果OSS下载失败,应该有一个错误处理机制,比如返回一个错误页面或者错误信息。

  10. 安全性:确保 fileNameuploadingType 参数是从可信来源获取的,以防止安全问题,如路径遍历攻击。

如果 fileUploadUtil.getInputStream(fileName) 方法能够正确实现从OSS获取文件流,那么这段代码应该能够从OSS下载图片。但是,你需要确保所有依赖的变量和方法都已经被正确实现和配置。

你觉得结果怎么样?

以上内容由AI搜集生成,仅供参考

在线客服