gpt4 book ai didi

java - Glassfish - 上传图片 - 做对了

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:45 24 4
gpt4 key购买 nike

我使用的是最新的 glassfish (3.1.2) - 因此不需要 apache FileItem 并且 getPart() 没有错误。我读到上传图像的最佳做法是将它们保存在文件系统中(例如,参见 here)。我正在编辑已经存在的代码 - 那样很臭 - 所以我有了这样做的想法:

Part p1 = request.getPart("file");
System.out.println("!!!!!P1 : " + p1);

打印:

!!!!!P1 : File name=DSC03660.JPG, 
StoreLocation=C:\_\glassfish3\glassfish\domains\domain1\generated\jsp\elkethe\upload_7cb06306_138b413999a__7ffa_00000000.tmp,
size=2589152bytes, isFormField=false, FieldName=file

我的换行符。在人们正在做的代码中:

if (request.getParameter("crop") != null) {
// get path on the server
String outputpath = this.getServletContext().getRealPath(
"images/temp/" + session.getId() + ".jpg");
// store photo
InputStream is = p1.getInputStream();
createPhoto(is, outputpath);
session.setAttribute("photo_path", "images/temp/" + session.getId()
+ ".jpg");
response.sendRedirect("cropping");
return;
}

在哪里

private void createPhoto(InputStream is, String outputpath) {
FileOutputStream os = null;
try {
os = new FileOutputStream(outputpath);
// write bytes taken from uploaded file to target file
int ch = is.read();
while (ch != -1) {
os.write(ch);
ch = is.read();
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
Helpers.close(os);
}
}

现在发生的事情是文件在提交表单时上传到 StoreLocation (???) 中,显然所有这些 p1.getInputStream() 都是徒劳的。

我的问题是:

  • StoreLocation 是什么?那些 glassfish 上传的 tmp 是多少?所有这些参数设置在哪里?我读过 BalusC' tutorial - 但没有提及 StoreLocation(谷歌不是很有帮助 either )。
  • 处理这种情况的更专业方法是什么 - 包括将照片保存在 webroot 之外 - 但使用 glassfish 提供的设施(如果它确实提供)?
  • 即使 p1 打印这么好我也逃脱了(它不会 seem 来覆盖 toString())

甚至对如何重命名照片等的提示感兴趣(这个 sessionID 是对的吗?- 还要检查时间技巧):

if (request.getParameter("save") != null) {
long time = System.currentTimeMillis();
String path = "images/upload/" + session.getId() + time + ".jpg";
String outputpath = this.getServletContext().getRealPath(path);
// store photo
InputStream is = p1.getInputStream();
createPhoto(is, outputpath);
// etc
}

最佳答案

好的做法是在文件系统上选择一个上传照片的路径。通常此路径被编程为可通过 java 系统属性进行配置(例如:通过在 JVM 参数上传递 -Dcom.mycompany.uploadPath=/path/to/photos/dir 系统属性)。

您还可以使用 java 系统属性来查找环境特定路径:user.diruser.home 等。参见 System Properties on Java SE Tutorial .或者要使用 glassfish 相对路径,请参阅 glassfish system properties .

一旦您引用了Part ,就是做文件IO把上传的文件复制到这个上传路径,eg:

Part part = // obtain part somehow..
String photoFileName = // build a file name somehow..
InputStream photoInputStream = part.getInputStream();
FileOutputStream photoOutputStream = new FileOutputStream(System.getProperty("com.mycompany.uploadPath") + File.separator + photoFileName);
IOUtils.copy(photoInputStream, photoOutputStream);
// close streams here...

上面的代码使用了apache IOUtils为了方便起见,您可以随意编写自己的复制方法。您还应该添加异常处理方法

关于java - Glassfish - 上传图片 - 做对了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11615832/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com