0

我对如何制作一个包含一些上传文件的模型感到困惑,例如:

用户有照片。

我已经知道如何上传文件,但这里的问题是关于如何处理现在上传的文件,如何将这个新上传的文件(示例中的照片)与模型(示例中的用户)链接)。

谢谢。

OBS:这里使用 Java 的 play,而不是 Scala。

4

2 回答 2

1

您必须将您的用户链接到他的图片。为此,您最好的选择是使用应该是唯一的用户 ID。

然后,如果您将照片上传到pictures/user文件系统中的文件夹下,那么您应该将图片另存为pictures/user/USER_ID.png(png 或 jpg 或其他任何格式)。

然后,您可以有一个根据用户 ID 检索图片的操作:

public static Result picture(String userId) {

    Picture picture = Picture.findPicture(userId);
    if (picture != null) {
        response().setContentType(picture.contentType);
        return ok(picture.bytes);
    }
    return notFound();
}

图片类看起来像:

public class Picture {

    public byte[] bytes;

    public String contentType;

    public static Picture findPicture(String userId) {
          String[] extensions = {"png","jpg"}; // an enum should be better
          for (String extension:extensions) {
              String path = "pictures/user/" + userId + "." + extension;
              if (new File().exists(path)) {
                    Picture picture = new Picture();
                    picture.bytes = IOUtils.toByteArray(new FileInpustream(path));
                    picture.contentType = findContentType(extension);
                    return picture;
              }
          }
          return null;
    }

    protected static String findContentType(String extension) {
          if (extension.equalsIgnoreCase("jpg") {
              return "image/jpeg";
          } else if (extension.equalsIgnoreCase("png") {
              return "image/png";
          }
    }
}

我曾经做过类似的事情(但图片存储在内存中),你可以看看这里

于 2012-07-23T07:26:07.027 回答
0

如果用户只有一张图片,只需创建一个约定。例如,如果您的用户在 2012 年 7 月 23 日注册并且 id = 100,则将文件移动到从这些数据映射的某个位置:

/uploaded-dir/2012/07/23/100/picture.jpg

之后,您可以使用相同的约定来读取文件。

于 2012-07-23T06:25:55.633 回答