文件

创建一个Parse文件

Parse.File使你可以在云端存储文件,以免将大型数据存储在Parse.Object中,造成数据冗余。最常用的使用场景就是存储图片了,但是你也可以用它来存储文档、视频、音乐和任何二进制文件(最大支持10M)。

Parse.File的使用超级简单,你有两种方法可以创建一个文件。首先是使用base64编码字符串创建:

  1. var base64 = "V29ya2luZyBhdCBQYXJzZSBpcyBncmVhdCE=";
  2. var file = new Parse.File("myfile.txt", { base64: base64 });

或者,你可以从字节内容的数组中创建一个文件:

  1. var bytes = [ 0xBE, 0xEF, 0xCA, 0xFE ];
  2. var file = new Parse.File("myfile.txt", bytes);

Parse将会根据文件名自动检查文件类型,你也可以使用第三个参数Content-Type来指定文件类型:

  1. var file = new Parse.File("myfile.zzz", fileData, "image/png");

在H5应用中最常见的是,用html表单上传文件,这在现代化的浏览器中实现超级简单。创建一个input标签,使用户可以从本地设备选择文件上传:

  1. <input type="file" id="profilePhotoFileUpload">

然后,在某个点击事件中,获得引用的文件:

  1. var fileUploadControl = $("#profilePhotoFileUpload")[0];
  2. if (fileUploadControl.files.length > 0) {
  3. var file = fileUploadControl.files[0];
  4. var name = "photo.jpg";
  5. var parseFile = new Parse.File(name, file);
  6. }

注意在上面例子中,我们的文件名是photo.jpg,两处注意:

  • 你不需要担心文件名冲突,因为上传的每个文件都会有一个唯一的id,所以上传n个photo.jpg的文件都不在话下。
  • 给你上传的文件指定文件拓展名是很重要的,Parse会根据扩展名来对这个文件做相应的计算、处理。所以,如果你上传的是png图片,请确保你的文件名以.png结尾。

下一步就是存储文件到云端了。和Parse.Object一样,有多种保存文件的方法,你可以选择适合你的方法处理回调和错误:

  1. parseFile.save().then(function() {
  2. // The file has been saved to Parse.
  3. }, function(error) {
  4. // The file either could not be read, or could not be saved to Parse.
  5. });

最后,你可以用Parse.Object关联Parse.File,就像关联其他对象一样:

  1. var jobApplication = new Parse.Object("JobApplication");
  2. jobApplication.set("applicantName", "Joe Smith");
  3. jobApplication.set("applicantResumeFile", parseFile);
  4. jobApplication.save();

获得文件

获得文件的最佳实践还要视你的应用而定。因为有跨域请求,所以最好先确保跨域能正常工作。典型的应用场景就是在页面上显示上传的图片,下面我们用jQuery在页面上显示上传的图片文件:

  1. var profilePhoto = profile.get("photoFile");
  2. $("profileImg")[0].src = profilePhoto.url();

如果你想在云代码中处理文件数据,你可以用我们的http请求库来获取文件:

  1. Parse.Cloud.httpRequest({ url: profilePhoto.url() }).then(function(response) {
  2. // 文件数据在 response.buffer 中。
  3. });

你可以使用REST API删除对象引用的文件,但是你需要提供master key才有权限删除文件。

如果你的文件没有被任何对象引用,那么不能通过REST API删除文件,你应该到应用设置页面清理未使用的文件。注意,删除后就不能再被访问到了。