@PostMapping(value = "/integration/api/oss/post/uploadFile") public RestResult uploadVideo(@RequestParam("file") MultipartFile file, @RequestParam(value = "upload_id") String uploadId, @RequestParam(value = "type") String type使用formData axios上传错误
时间: 2024-03-26 16:38:51 浏览: 76
如果你想要使用 axios 上传文件,应该使用 `FormData` 对象来构造请求体,而不是直接在请求体中传递对象或字符串。下面是一个正确的示例:
```
const formData = new FormData();
formData.append('file', file);
formData.append('upload_id', uploadId);
formData.append('type', type);
axios.post('/integration/api/oss/post/uploadFile', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(response => {
// handle response
}).catch(error => {
// handle error
});
```
注意,这里设置了请求头的 Content-Type 为 multipart/form-data,这是因为我们使用了 FormData 对象来构造请求体。另外,`file` 参数应该是一个 `File` 或 `Blob` 对象,而不是字符串。如果你需要上传多个文件,可以使用 `formData.append('file', file1)`,`formData.append('file', file2)` 这样的方式来添加多个文件。最后,后端代码应该与你提供的代码一致,使用 `@RequestParam` 注解来接收参数。
相关问题
@PostMapping("/image") public AjaxResult upload(@RequestParam("file") MultipartFile multipartFile) { if (multipartFile==null){ return AjaxResult.error("null"); } //获取文件名称 String originalFilename = multipartFile.getOriginalFilename(); //截取文件名 String s = StringUtils.substringAfter(originalFilename, "."); //获取获取返回的url String upload = OssUtil.upload(ossConfig, multipartFile); if(upload==null){ AjaxResult.error("403","上传出错"); } // 设置URL过期时间为5年 3600l* 1000*24*365*10 Date expiration = new Date(System.currentTimeMillis()+ 3600L * 1000 * 24 * 365*5); // 生成URL URL url = ossClient.generatePresignedUrl(ossConfig.getBucketName(), upload, expiration); //去除URL的参数 这个私有获取不到 String tmp = url.toString().split("\\?")[0]; int index = tmp.lastIndexOf("/") + 1; return AjaxResult.success("200",url); }
这是一个Java的SpringBoot的后端接口,用于上传图片并返回图片的URL。首先判断上传的文件是否为空,然后获取文件名并截取后缀名。接着调用OssUtil的upload方法上传文件并获取返回的URL。如果上传出错则返回错误信息。然后根据需要设置URL的过期时间,生成URL并返回。最后对URL进行处理并返回给前端。
public R uploadVideo(@RequestParam("files") MultipartFile file) throws IOException { //文件路径files String filename = file.getOriginalFilename(); String filePath = getFilePath(filename); File compressedFile = File.createTempFile("compressedVideo", "."+StringUtils.substringAfterLast(filename,".")); oSSClient.setBucketAcl(aliyunConfig.getBucket(), CannedAccessControlList.PublicRead); oSSClient.putObject(aliyunConfig.getBucket(), filePath,new ByteArrayInputStream(compressedFile.getBytes()));报错compressedFile.getBytes()怎办
在您的代码中,`compressedFile` 是一个临时文件对象,而 `getBytes()` 方法是用于获取字节数组的文件内容。然而, `getBytes()` 方法不适用于文件对象,而是适用于字符串对象。
要解决这个问题,您可以使用 `Files.readAllBytes()` 方法来读取临时文件的内容,并将其上传到OSS。以下是修改后的代码:
```java
import org.springframework.util.StringUtils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
public R uploadVideo(@RequestParam("files") MultipartFile file) throws IOException {
// 文件路径files
String filename = file.getOriginalFilename();
String filePath = getFilePath(filename);
File compressedFile = File.createTempFile("compressedVideo", "." + StringUtils.substringAfterLast(filename, "."));
// 压缩视频,并将输出保存到临时文件
compressVideo(file.getInputStream(), compressedFile);
// 设置OSS Bucket的访问权限为公共读
oSSClient.setBucketAcl(aliyunConfig.getBucket(), CannedAccessControlList.PublicRead);
// 读取临时文件的内容,并上传到OSS
byte[] fileContent = Files.readAllBytes(compressedFile.toPath());
oSSClient.putObject(aliyunConfig.getBucket(), filePath, new ByteArrayInputStream(fileContent));
// 删除临时文件
compressedFile.delete();
// 返回成功的响应
return R.ok();
}
private void compressVideo(InputStream inputStream, File outputFile) throws IOException {
// 使用FFmpeg压缩视频,将输出保存到 outputFile
// ...
}
private String getFilePath(String filename) {
// 根据需要生成文件路径
// ...
}
```
在上述修改后的代码中,我们定义了一个新的方法 `compressVideo`,该方法接收输入流和输出文件对象,并使用FFmpeg压缩视频并将输出保存到文件中。您需要根据您的实际需求来实现该方法。
然后,我们使用 `Files.readAllBytes()` 方法读取临时文件的内容,并将其上传到OSS。
最后,我们删除临时文件,并返回成功的响应。
请注意,您还需要实现 `getFilePath` 方法来根据需要生成文件的路径。
希望这次的修改能够解决您的问题。如果还有其他疑问,请随时提问。
阅读全文