gpt4 book ai didi

apache-flex - 使用 Flex UI 和 Spring/Hibernate/BlazeDS 后端的简单文件上传?

转载 作者:行者123 更新时间:2023-12-04 06:50:13 27 4
gpt4 key购买 nike

我是 Flex 和 BlazeDS 的新手,我正在尝试实现一个简单的应用程序,该应用程序在前端使用 Flex,在后端使用 Spring/Hibernate 应用程序,两者之间的通信通过 BlazeDS channel 进行。

我正在寻找解决此问题的最佳和/或最简单方法的方向。我以这样一种方式设置用户界面,即向用户显示一个文件选择器,他们可以在其中选择他们想要上传的图像文件。选择并提交(作为表单提交)时,服务器端应接收图像文件数据以及一些相关元数据,例如描述和日期,然后使用图像文件数据和相关元数据填充Hibernate实体/POJO ,然后将实体/POJO 持久化到数据库中。

我找到了一些关于如何使用 servlet 进行文件上传和下载的示例 here和 FileReference 类( herehere ),但这些似乎没有以利用 BlazeDS 和/或 Spring/Hibernate 的方式解决问题。我想将图像文件数据和相关元数据(描述、捕获日期等)放入 Flex 应用程序内的值对象中,然后通过 BlazeDS 将其发送到由我在 Tomcat 上运行的 Spring/Hibernate 应用程序提供的服务。在这个服务中,我想从 Flex 应用程序发送的值对象中提取图像数据(实际的 JPG/PNG/GIF 数据和相关的元数据,如描述等)到一个实体/POJO,然后通过在我的数据库中 hibernate 。

这可以做到吗,如果可以,最好的方法是什么?我是否错误地假设,如果我使用 BlazeDS,那么我以某种方式绕过了在服务器端提供基于 HTTP 的服务(例如 servlet)的需要,而是可以将我的 Java 服务用作“RemoteObjects”?在进行这种传输时,Java POJO/实体类和 Flex 值对象类之间是否一定存在一对一的映射?如果是这样,是否有一个工具可以从 Java POJO 创建相应的 Flex 值对象,反之亦然。

在此先感谢您的帮助、评论、建议等。

- 詹姆士

更新 :一些代码可以更清楚地说明这一点:

我在 Flex 中将此作为我的值对象:

package valueobjects
{
import flash.utils.ByteArray;

[Bindable]
[RemoteClass(alias="com.abc.example.persistence.entity.Image")]

public class Image
{
public var id:Number;
public var captureDate:Date;
public var description:String;
public var imageData:ByteArray;

public function Image() {}
}

我假设这可以用作到我的服务和服务器端 DAO 类使用的 POJO 类的一对一映射,如下所示:
package com.abc.example.persistence.entity;

import java.sql.Blob;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;

@Entity(name = "IMAGE")
public class Image
extends AbstractBaseEntity<Long>
{
private String description;
private Date captureDate;
private Blob imageData;

@Column(name = "CAPTURE_DATE", nullable = true)
public Date getCaptureDate()
{
return captureDate;
}

@Column(name = "DESCRIPTION", nullable = true)
public String getDescription()
{
return description;
}

@Column(name = "IMAGE_DATA", nullable = true)
public Blob getImageData()
{
return imageData;
}

public void setCaptureDate(final Date captureDate)
{
this.captureDate = captureDate;
}

public void setDescription(final String description)
{
this.description = description;
}

public void setImageData(final Blob imageData)
{
this.imageData = imageData;
}
}

在我的 Flex 应用程序中,我使用描述字符串、日期和图像文件数据(基于用户的文件选择和描述的文本输入)填充 Image 对象的字段,然后调用映射到Tomcat 上运行的服务。我在我的 Flex 代码中使用 Image 值对象作为参数进行 RemoteObject 服务调用,但在服务端运行的服务方法实际上需要一个 POJO/实体类型的参数,而正是在这里,我在想某种Flex 值对象和 Java POJO 之间的转换/转换将发生(凭借值对象的类声明上的 RemoteClass 别名设置),但它似乎不会以这种方式发生,因为当我调试应用程序时,Java 服务仅在进行服务调用时获取空值。

在我的 Flex 应用程序中,我有一个 FileReference 和 Image 值对象作为公共(public)的可绑定(bind)变量:
[Bindable]
public var imageToBeArchivedFileReference:FileReference = new FileReference();
[Bindable]
public var imageToBeArchivedValueObject:valueobjects.Image = new valueobjects.Image();

当用户单击文件选择按钮时,还有一个事件处理程序用于浏览文件:
protected function imageFileSelectButton_clickHandler(event:MouseEvent):void
{
var imageFileFilter:FileFilter = new FileFilter("Images (*.jpg, *.jpeg, *.gif, *.png)", "*.jpg;*.jpeg;*.gif;*.png");
var fileTypes:Array = new Array();
fileTypes.push(imageFileFilter);
imageToBeArchivedFileReference.addEventListener(Event.SELECT, imageToBeArchived_fileSelectHandler);
imageToBeArchivedFileReference.browse(fileTypes);
}

有一个事件处理程序可以在选择图像文件时构建值对象:
private function imageToBeArchived_fileSelectHandler(event:Event):void
{
imageToBeArchivedFileReference.load();
imageToBeArchivedValueObject = new valueobjects.Image()
imageToBeArchivedValueObject.imageData = imageToBeArchivedFileReference.data;
imageToBeArchivedValueObject.description = imageToBeArchivedDescription.text;
imageToBeArchivedValueObject.captureDate = imageToBeArchivedFileReference.creationDate;
}

并且有一个事件处理程序,当用户单击提交按钮以执行图像保存/上传时会调用该处理程序:
protected function archiveImageButton_clickHandler(event:MouseEvent):void
{
imageArchivalService.archiveImage(imageToBeArchived);
}

在服务器端,我的 Java 类正在对 POJO 进行简单的保存:
public void archiveImage(final Image image)
{
imageDao.saveOrUpdate(image);
}

当我在上面的方法中设置断点并查看图像变量时,它看起来是空的,所以我假设从 Flex 值对象到 Java POJO 的转换没有按预期进行,而且还有更多只需在 Flex 值对象类中添加一个 RemoteClass 别名。

最佳答案

看看这个例子,它就在那里。

http://biemond.blogspot.com/2008/08/flex-upload-and-download-with-blazeds.html

不要使用加载器类,使用 readBytes 调用。

确保你去评论,那里有有值(value)的信息。

干杯

关于apache-flex - 使用 Flex UI 和 Spring/Hibernate/BlazeDS 后端的简单文件上传?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238637/

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