通过 post 请求将 pdf 文件发送到服务器
Sending a pdf file to a server through post request
我的前端有一个供用户使用的 pdf 上传部分,我想从那里通过我创建的微服务将它发送到 s3 存储桶。我的微服务上有一条 post 路由需要该文件,但是当我从前端发送它时,它是空的。从前端发送文件时,我肯定遗漏了一些东西。
export class FileUpload {
private file: File;
constructor(
private service: FileService;
) { }
uploadFile(): void {
const formdata = new FormData();
formdata.append('pdf-file', this.file);
this.service.upload(formdata).subscribe(uploaded => {
console.log(uploaded);
}
}
}
export class FileService {
constructor(private http: HttpClient) { }
public upload(file) {
const headers = new HttpHeaders({'Content-Type': 'multipart/form-data'});
return this.http.post('http://myserviceurl/file', file, {headers: headers}).pipe(
catchError(err => {
return error;
});
}
}
FileUpload
class里面的文件变量是用户上传的pdf文件。在我可以通过 http 请求发送文件之前,我有点想弄清楚我需要对文件做什么。任何帮助将不胜感激。
你的代码看起来不错。但是,我们应该了解我们对后端文件的期望。
我相信,文件或文件对象不需要任何更改。您只需将文件作为表单数据发送即可。
下面是在 angular 中上传文件作为表单数据,并在 Spring 引导中获取它的代码片段。
Angular 片段(用于将文件作为表单数据上传):
uploadPdfFile(event) {
const pdfFiles = event.target.files;
const pdfFile = pdfFiles.item(0);
const formdata: FormData = new FormData();
formdata.append('pdfFile', pdfFile); // Should match the parameter name in backend
this.http.post<any>('http://localhost:8088/file', formdata).subscribe(
(data) => {
console.log('Upload File ' + data);
},
(error) => {
console.error(error.error);
});
}
用于在参数中获取文件的后端微服务(Spring引导):
@PostMapping(path = "file")
public String uploadPdfFile(@RequestParam("pdfFile") MultipartFile pdfFile) {
// TODO: Save the file
// TODO: Upload to S3
return "done";
}
更多理解参考资料:
使用 FormData 上传文件 angular。
// 创建 FormData 对象
const formData = new FormData();
// 在 FormData 中添加值
formData.Append("key","value");
然后通过将 FormData 对象作为参数传递来调用您的方法。
uploadFile(): void {
this.service.upload(formData).subscribe(uploaded => {
console.log(uploaded);
}
}
我的前端有一个供用户使用的 pdf 上传部分,我想从那里通过我创建的微服务将它发送到 s3 存储桶。我的微服务上有一条 post 路由需要该文件,但是当我从前端发送它时,它是空的。从前端发送文件时,我肯定遗漏了一些东西。
export class FileUpload {
private file: File;
constructor(
private service: FileService;
) { }
uploadFile(): void {
const formdata = new FormData();
formdata.append('pdf-file', this.file);
this.service.upload(formdata).subscribe(uploaded => {
console.log(uploaded);
}
}
}
export class FileService {
constructor(private http: HttpClient) { }
public upload(file) {
const headers = new HttpHeaders({'Content-Type': 'multipart/form-data'});
return this.http.post('http://myserviceurl/file', file, {headers: headers}).pipe(
catchError(err => {
return error;
});
}
}
FileUpload
class里面的文件变量是用户上传的pdf文件。在我可以通过 http 请求发送文件之前,我有点想弄清楚我需要对文件做什么。任何帮助将不胜感激。
你的代码看起来不错。但是,我们应该了解我们对后端文件的期望。
我相信,文件或文件对象不需要任何更改。您只需将文件作为表单数据发送即可。
下面是在 angular 中上传文件作为表单数据,并在 Spring 引导中获取它的代码片段。
Angular 片段(用于将文件作为表单数据上传):
uploadPdfFile(event) {
const pdfFiles = event.target.files;
const pdfFile = pdfFiles.item(0);
const formdata: FormData = new FormData();
formdata.append('pdfFile', pdfFile); // Should match the parameter name in backend
this.http.post<any>('http://localhost:8088/file', formdata).subscribe(
(data) => {
console.log('Upload File ' + data);
},
(error) => {
console.error(error.error);
});
}
用于在参数中获取文件的后端微服务(Spring引导):
@PostMapping(path = "file")
public String uploadPdfFile(@RequestParam("pdfFile") MultipartFile pdfFile) {
// TODO: Save the file
// TODO: Upload to S3
return "done";
}
更多理解参考资料:
使用 FormData 上传文件 angular。
// 创建 FormData 对象
const formData = new FormData();
// 在 FormData 中添加值
formData.Append("key","value");
然后通过将 FormData 对象作为参数传递来调用您的方法。
uploadFile(): void {
this.service.upload(formData).subscribe(uploaded => {
console.log(uploaded);
}
}