- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在阅读文档并在互联网上搜索一些技巧后,我最终决定创建一个 Stack OverFlow 帐户;看起来很绝望?哈哈,走吧。
编辑(2012 年 5 月 16 日):当我找到解决方案(最终由我自己找到)时,我用我正在运行的代码替换了我的旧代码。
我转到/admin/lstimg (ListImage),它从我的数据库中获取图像 (URL) 记录集合。然后将集合设置为一个属性,允许我使用我的 jsp 文件中的数据。
注意:公共(public)类 ListImageServlet 扩展了 HttpServlet并用 MultipartConfig 注释.
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try
{
Collection images = ImageFacade.getIjc().findImageEntities();
request.setAttribute("images", images);
request.getRequestDispatcher("/adm/img/lstimg.jsp").forward(request, response);
}
catch (Exception ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, "Cannot retrieve the images.", ex);
}
}
在我的 jsp 中,有一个很大的表单(就像我的“图像”集合一样)。在这里,我使用“图像”集合中的数据。对于每个图像,在第一列中是一个缩略图,在第二列中是一个文件输入。我正在尝试通过这个(单个)表单执行多个更新。
<form method="post" action="../admin/lstimg" enctype="multipart/form-data">
<table>
<thead>
<tr>
<th>Thumb</th>
<th>to update</th>
</tr>
</thead>
<tbody>
<c:forEach items="${images}" var="image">
<tr>
<td>
<img src="myURL" height="100"/>
</td>
<td>
<input type="file" name="${image.thumb}"/>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<input type="submit" value="Proceed" />
</form>
我的第一个问题是:因为我需要新图像具有相同的“image.thumb”(这是关键),所以我将文件输入名称设置为当前的“image.thumb”,但我想知道是否有一些问题需要检索我的文件在我的电脑上?因为我电脑上的文件有自己的路径/文件名,而我服务器上的文件有另一个路径/UUID( key )。
编辑(05/16/2012):由于 AWS 不要求文件路径(手动设置),因此没有问题。
表单的外观 ( Web Browser )
在我选择了我需要更新/更改的图像后,我单击“提交”按钮(继续)。
S3Service.buildPostForm(String bucketName, String key, ProviderCredentials credentials, Date expiration, String[] conditions, String[] inputFields, String textInput, boolean isSecureHttp);
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
try
{
ImageCheck.initAS3(request);
ImageCheck.update(request, response);
}
catch (S3ServiceException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (ServiceException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (NoSuchAlgorithmException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
catch (IllegalStateException ex)
{
Logger.getLogger(ListImageServlet.class.getName()).log(Level.SEVERE, null, ex);
}
response.sendRedirect("../admin/lstimg");
}
我的第二个问题是:要通过 servlet 上传/更改文件,因为我使用自己的表单,我需要将文件设置为我的 S3Object,但我不知道我可以用我的“selectedParts”做什么?有没有办法将零件更改为文件?我必须使用 Part 以外的东西吗?
编辑(2012 年 5 月 16 日):My solution
对不起我的英语。提前感谢您的建议、意见和答案。如果您对代码有任何疑问或需要更多信息,请不要犹豫。
最佳答案
我非常专注于S3Object#S3Object(java.io.File)我没有意识到我可以使用 StorageObject#setDataInputStream .
当我将旧图像 Key 设置为新图像 Key 时,我的新问题是网络浏览器会缓存旧图像。我在这上面花了很多时间,认为我的功能没有正确运行,即使我什至不知道我在哪里可能犯了错误;但我继续使用 AWS 并检查了已成功更新的“上次修改”值。我清除了缓存,发现从一开始就一切正常。
如果它可以帮助某些人,我提供了我所做的允许通过单个表单更改多个 S3Object 的功能。如果您有任何问题、建议或者您需要对该代码发表任何评论,请随时联系我。
public static void upload(HttpServletRequest request, Part part, S3Service s3Service, S3Bucket s3Bucket)
throws S3ServiceException, NoSuchAlgorithmException, IOException
{
S3Object s3Object = new S3Object();
s3Object.setDataInputStream(part.getInputStream());
s3Object.setKey(part.getName());
s3Object.setContentLength(part.getSize());
s3Object.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ);
s3Service.putObject(s3Bucket, s3Object);
}
public static void update(HttpServletRequest request)
throws S3ServiceException, ServiceException, NoSuchAlgorithmException, IOException, IllegalStateException, ServletException
{
AWSCredentials awsCredentials = (AWSCredentials) request.getSession().getAttribute("awsCredentials");
S3Service s3Service = (S3Service) request.getSession().getAttribute("s3Service");
S3Bucket s3Bucket = (S3Bucket) request.getSession().getAttribute("s3Bucket");
String bucketName = (String) request.getSession().getAttribute("bucketName");
String prefix = "uploads/";
String delimiter = null;
S3Object[] filteredObjects = s3Service.listObjects(bucketName, prefix, delimiter);
Collection<Part> allParts = request.getParts();
Collection<Part> selectedParts = new ArrayList<Part>();
Collection<String> keys = new ArrayList<String>();
for (Part part : allParts)
{
if (part.getSize()>1 && part.getSize()<10485760)
{
selectedParts.add(part);
}
}
for (int o = 0; o < filteredObjects.length; o++)
{
String keyObject = filteredObjects[o].getName();
keys.add(keyObject);
}
if (selectedParts.size() > 0)
{
for (Part part : selectedParts)
{
if (keys.contains(part.getName()))
{
s3Service.deleteObject(s3Bucket, part.getName());
upload(request, part, s3Service, s3Bucket);
}
else
{
selectedParts.remove(part);
}
}
}
else
{
String ex = "No file to update.";
exceptions.add(ex);
}
}
关于java - 使用 Parts 的 Amazon S3 多文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10576698/
今天我在一个 Java 应用程序中看到了几种不同的加载文件的方法。 文件:/ 文件:// 文件:/// 这三个 URL 开头有什么区别?使用它们的首选方式是什么? 非常感谢 斯特凡 最佳答案 file
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我有一个 javascript 文件,并且在该方法中有一个“测试”方法,我喜欢调用 C# 函数。 c# 函数与 javascript 文件不在同一文件中。 它位于 .cs 文件中。那么我该如何管理 j
需要检查我使用的文件/目录的权限 //filePath = path of file/directory access denied by user ( in windows ) File fil
我在一个目录中有很多 java 文件,我想在我的 Intellij 项目中使用它。但是我不想每次开始一个新项目时都将 java 文件复制到我的项目中。 我知道我可以在 Visual Studio 和
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有 3 个组件的 Twig 文件: 文件 1: {# content-here #} 文件 2: {{ title-here }} {# content-here #}
我得到了 mod_ldap.c 和 mod_authnz_ldap.c 文件。我需要使用 Linux 命令的 mod_ldap.so 和 mod_authnz_ldap.so 文件。 最佳答案 从 c
我想使用PIE在我的项目中使用 IE7。 但是我不明白的是,我只能在网络服务器上使用 .htc 文件吗? 我可以在没有网络服务器的情况下通过浏览器加载的本地页面中使用它吗? 我在 PIE 的文档中看到
我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。 我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 j
using namespace std; struct WebSites { string siteName; int rank; string getSiteName() {
我是 Linux 新手,目前正在尝试使用 ginkgo USB-CAN 接口(interface) 的 API 编程功能。为了使用 C++ 对 API 进行编程,他们提供了库文件,其中包含三个带有 .
我刚学C语言,在实现一个程序时遇到了问题将 test.txt 文件作为程序的输入。 test.txt 文件的内容是: 1 30 30 40 50 60 2 40 30 50 60 60 3 30 20
如何连接两个tcpdump文件,使一个流量在文件中出现一个接一个?具体来说,我想“乘以”一个 tcpdump 文件,这样所有的 session 将一个接一个地按顺序重复几次。 最佳答案 mergeca
我有一个名为 input.MP4 的文件,它已损坏。它来自闭路电视摄像机。我什么都试过了,ffmpeg , VLC 转换,没有运气。但是,我使用了 mediainfo和 exiftool并提取以下信息
我想做什么? 我想提取 ISO 文件并编辑其中的文件,然后将其重新打包回 ISO 文件。 (正如你已经读过的) 我为什么要这样做? 我想开始修改 PSP ISO,为此我必须使用游戏资源、 Assets
给定一个 gzip 文件 Z,如果我将其解压缩为 Z',有什么办法可以重新压缩它以恢复完全相同的 gzip 文件 Z?在粗略阅读了 DEFLATE 格式后,我猜不会,因为任何给定的文件都可能在 DEF
我必须从数据库向我的邮件 ID 发送一封带有附件的邮件。 EXEC msdb.dbo.sp_send_dbmail @profile_name = 'Adventure Works Admin
我有一个大的 M4B 文件和一个 CUE 文件。我想将其拆分为多个 M4B 文件,或将其拆分为多个 MP3 文件(以前首选)。 我想在命令行中执行此操作(OS X,但如果需要可以使用 Linux),而
快速提问。我有一个没有实现文件的类的项目。 然后在 AppDelegate 我有: #import "AppDelegate.h" #import "SomeClass.h" @interface A
我是一名优秀的程序员,十分优秀!