Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上传HTML格式的pdf并反序列化json文件_Html_Angularjs_Json_Spring Data - Fatal编程技术网

上传HTML格式的pdf并反序列化json文件

上传HTML格式的pdf并反序列化json文件,html,angularjs,json,spring-data,Html,Angularjs,Json,Spring Data,我试图上传一个html文件,然后通过Restanglar将其发送到我的数据库。 我的前端是angular和typescript的组合,但上传是一个表单 <form enctype="multipart/form-data"> <fieldset class="form-group" ng-repeat="field in $ctrl.metadata.fields"> <label ng-if="field.inputType !== 'hi

我试图上传一个html文件,然后通过Restanglar将其发送到我的数据库。 我的前端是angular和typescript的组合,但上传是一个表单

<form enctype="multipart/form-data">
    <fieldset class="form-group" ng-repeat="field in $ctrl.metadata.fields">
        <label ng-if="field.inputType !== 'hidden'" for="{{field.propertyKey}}"><strong>{{field.name}}</strong></label>
        <input ng-if="field.inputType !== 'select' && field.inputType !== 'file'" class="form-control" type="{{field.inputType}}" name="{{field.propertyKey}}" id="{{field.propertyKey}}" ng-model="$ctrl.data[field.propertyKey]"/>
        <input ng-if="field.inputType === 'file'" class="form-control" ngf-select type="{{field.inputType}}" name="{{field.propertyKey}}" id="{{field.propertyKey}}" ng-model="$ctrl.data[field.propertyKey]"/>
        <sp-dropdown ng-if="field.inputType === 'select'" value="$ctrl.data[field.propertyKey]" api-domain="field.linkedObjectApiDomain" linked-object-name="field.linkedObjectName"></sp-dropdown>
    </fieldset>
    <button class="btn btn-primary" ng-click="$ctrl.save({item: $ctrl.data})">Save</button>
    <button ng-if="$ctrl.metadata.buttons.hasOpen" class="btn btn-primary" ng-click="$ctrl.open()">Open</button>
</form>
包含该文件的第二个日志提供了json:

lastModified:1463402787393 lastModifiedDate:Mon May 16 2016 14:46:27 GMT+0200 (Romance (zomertijd)) name:"Rapport.pdf" size:83605 type:"application/pdf" upload:Promise webkitRelativePath:"" __proto__:File

以及我的这个类的存储库

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package be.ugent.lca.data.repository;

import be.ugent.lca.data.entities.Dossier;
import be.ugent.lca.data.query.DossierQuery;
import be.ugent.sherpa.repository.RestRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
/**
 *
 * @author Sam
 */
@RepositoryRestResource(collectionResourceRel = "dossiers", path = "dossiers")
public interface DossierRepository extends RestRepository<Dossier, DossierQuery<?>>{

}
但我的问题是,我不知道如何准确地反序列化文件json,因为写出root.get(“rapport”)会返回一个空字符串


任何帮助都将不胜感激。

我已经完成了文件上传

首先,我将上传的文件从我的其余数据中分离出来,这样我就不必重写所有有效的自动反序列化

this.restService.save(this.metadata.apiDomain, item).then((addedItem: any) => {
    toastr.success(`${addedItem.naam} successfully created.`, `Overzicht Dossiers Created`);
    console.log("created item ", addedItem);
    var fd = new FormData();
    fd.append("rapport", item["rapport"]);

    this.restService.one('dossiers/' + addedItem.id + '/rapport').withHttpConfig({transformRequest: angular.identity}).customPOST(fd, '', undefined, {'Content-Type': undefined}).then(
        (addedDossier: any) => {
            console.log("posted dossier ", addedDossier);
        }
    );
});
在我的正常保存的回调中,我做了一个自定义的post到dossiers/{id}/report。为此,我需要一个自定义控制器

@BasePathAwareController
@RequestMapping("/dossiers/{id}")
@ExposesResourceFor(Dossier.class)
public class DossierController {
BasePathAwawareController确保所有未覆盖的自动生成的路径保持存在

@Autowired
private DossierRepository dossierRepository;
有了这个,我注入了我的存储库以连接到我的数据库

@RequestMapping(path = "/rapport", method = RequestMethod.POST)//,headers = "content-type=multipart/form-data") 
public @ResponseBody String postRapport(@PathVariable("id") Long id,@RequestParam("rapport") MultipartFile file) {
    String name = "rapport";
    System.out.println("Entered custom file upload with id " + id);
    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();
            Dossier dossier = dossierRepository.findOne(id);
            dossier.setRapport(bytes);

            dossierRepository.save(dossier);
            return "You successfully uploaded " + name + " into " + name + "-uploaded !";
        } catch (Exception e) {
            return "You failed to upload " + name + " => " + e.getMessage();
        }
    } else {
        return "You failed to upload " + name + " because the file was empty.";
    }
}

这样,我就可以成功上传我的文件。

我不确定是否应该包括我的“Json字符串”有什么问题,或者这是否会不必要地使我的答案复杂化。或者我应该在我的问题中编辑它,因为它不是解决方案的一部分?
@BasePathAwareController
@RequestMapping("/dossiers/{id}")
@ExposesResourceFor(Dossier.class)
public class DossierController {
@Autowired
private DossierRepository dossierRepository;
@RequestMapping(path = "/rapport", method = RequestMethod.POST)//,headers = "content-type=multipart/form-data") 
public @ResponseBody String postRapport(@PathVariable("id") Long id,@RequestParam("rapport") MultipartFile file) {
    String name = "rapport";
    System.out.println("Entered custom file upload with id " + id);
    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();
            Dossier dossier = dossierRepository.findOne(id);
            dossier.setRapport(bytes);

            dossierRepository.save(dossier);
            return "You successfully uploaded " + name + " into " + name + "-uploaded !";
        } catch (Exception e) {
            return "You failed to upload " + name + " => " + e.getMessage();
        }
    } else {
        return "You failed to upload " + name + " because the file was empty.";
    }
}