0

我有一个 Play 1.2.4 应用程序,它是移动应用程序的后端。我想从移动应用上传一张图片并将该图片与用户相关联。我找到了很多答案,这些答案表明如果上传是从 Play 视图完成的,那么使用 Play 进行图像上传是多么容易。

传入的图像以multipart/form-dataPOST 请求的形式出现。包含图像的表单域是file。我创建了这个方法:

public static void uploadProfilePicture(File image, String filename, String token) {

}

在模型中,我有一个play.db.jpa.Blob名为图片的对象。如何将 转换Fileplay.db.jpa.Blob

4

3 回答 3

1

可以直接映射到Blob,不管是否来自 Play 视图。

public static void uploadProfilePicture(Blob file, String name, String token) {
    User u = User.find("byAuthToken", token).first();
    u.profile_picture = b;
    u.save();
    /* ........... */
}
于 2013-06-10T06:22:04.820 回答
0

我没有在我的模型上的数据类型中使用 BLOB,而是使用了 byte[].. 它将自动转换为数据库上的 blob..

您可以参考我的示例模型。

package models;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.joda.time.DateTime;
import play.db.jpa.GenericModel;
import com.google.gson.annotations.Expose;

@Entity
public class Memorandum extends GenericModel{
    @Id
    @GeneratedValue(generator = "system-uuid")
    @GenericGenerator(name = "system-uuid", strategy = "uuid2")
    @Expose
    public String id;
    @Lob
    public String details;
    public String filename;
    @Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
    public DateTime datePosted;
    public byte[] attachment;
    public String subject;

}

我的保存控制器

public static void save_memo(Memorandum memo,File attachment)
    {

        memo.datePosted = DateTime.now();

        if(attachment!=null)
        {
        memo.attachment = IO.readContent(attachment);
        memo.filename = attachment.getName();
        }

        memo.save();
        index();
    }

byte[] 在您的数据库中将采用 BLOB 格式。

于 2013-06-10T03:23:26.537 回答
0

这似乎有效:

public static void uploadProfilePicture(File file, String name, String token) {
    User u = User.find("authToken=?1", token).first();
    try {
        InputStream is = new FileInputStream(file);
        Blob b = new Blob();
        b.set(is, "image/png");
        u.profile_picture = b;
        renderJSON("{\"status\":\"success\"}");
    } catch (FileNotFoundException fnf) {
        Logger.info("File not found when trying to upload profile picture");
        renderJSON("{\"status\":\"fail\"}");
    }
}
于 2013-06-09T16:21:08.103 回答