我无法在远程服务器(apache2)上上传文件(图像)。我使用javaSpring引导作为后端,使用Angular 7作为前端)。在localhost:4200它工作得很好。在我从chrome浏览器控制台获得的远程服务器上:
POSThttp://www.xxx.tech:8081/images/upload400
错误:{时间戳:"2019-05-10T09:39:38.162 0000","状态": 400,"错误":"错误请求","消息":"未找到文件","路径":"/图像/上传"}"
标题: HttpHeaders{规范化名称: Map(0), lazyUpdate: null, lazyInit:}
消息:"Http失败响应http://www.xxx.tech:8081/images/upload: 400 OK"
名称:"HttpError响应"
ok: false
状态: 400
statusText:"OK"
url:"http://www.xxx.tech:8081/images/upload"
目录文件夹已经存在于VPS服务器上。如何使其工作?在我的controller.java我试图替换
File tmp = new File("../front/assets/img/").getCanonicalFile();
具有
File tmp = new File("./front/assets/img/").getCanonicalFile();
并与
File tmp = new File("/home/alexandra/www/front/assets/img/").getCanonicalFile();
但它仍然显示相同的错误消息
JAVA:ImageController。Java语言
@PostMapping(value="images/upload")
public String uploadImage( @RequestParam("file") MultipartFile transferedFile) throws Exception{
try {
//FOR LOCALHOST (works)
//File tmp = new File("../FRONT-
//Alexandra/src/assets/img/").getCanonicalFile();
//FOR REMOTE SERVER (don't work)
File tmp = new File("../front/assets/img/").getCanonicalFile();
String destination = tmp.getPath() + "/" + transferedFile.getOriginalFilename();
File data = new File(destination);
transferedFile.transferTo(data);
Image image = new Image(transferedFile.getOriginalFilename(), destination);
imageRepository.save(image);
return destination;
}catch( Exception param_exception) {
throw new ResponseStatusException(
HttpStatus.BAD_REQUEST,
"No file found");
}
}
角度:mycomponent。组成部分ts
public apiUrl: string = environment.ApiUrl;
...
public uploadImaeg(): void {
this.imgesUploaded.map(image => {
if (image != null && image != undefined) {
this.imagesService.addImage(image).subscribe();
}
})
}
images.service.ts
public addImage(param_file: File): Observable<Object> {
const headers: HttpHeaders = new HttpHeaders();
const data: FormData = new FormData();
data.append("file", param_file, param_file.name);
headers.append("Content-Type", "multipart/form-data");
const Obs: Observable<boolean> = this.serviceHttp.post(
this.apiUrl + "images/upload", data, { headers: headers}
).pipe(
map(
(param_response: boolean) => {
return param_response;
}
)
);
return Obs;
}
环境产品ts
export const environment = {
production: true,
ApiUrl: 'http://'+document.location.hostname +':8081/'
};
@AlexGera你让我明白了问题是什么:
我试过这样的代码:
private final Path rootLocation = Paths.get("images/upload");
@PostConstruct
public void init() {
try {
Files.createDirectories(rootLocation);
}
catch (IOException e) {
throw new RuntimeException("Could not initialize storage", e);
}
}
@PostMapping(value="images/upload")
public String uploadImage( @RequestParam("file") MultipartFile transferedFile) throws Exception{
try {
File tmp = new File("/home/alexandra/www/front/assets/img/").getCanonicalFile();
String destination = tmp.getPath() + "/" + transferedFile.getOriginalFilename();
File data = new File(destination);
transferedFile.transferTo(data);
Image image = new Image(transferedFile.getOriginalFilename(), destination);
imageRepository.save(image);
return destination;
}catch( Exception param_exception) {
throw new ResponseStatusException(
HttpStatus.BAD_REQUEST,
"No file found");
}
}
它没有解决问题,但在后面的文件夹中创建了一个文件夹:image/upload。而且,此文件夹的权限不是根目录,而不是filezilla服务器目录中所有文件夹的权限。是alexandra alexandra
因此,我更改了文件夹资产和文件夹img的权限(可能只有img,最后一个文件夹,应该可以工作,我不知道),因为我的路径是
/home/alexandra/www/front/assets/img/
我做到了:
cd /home/alexandra/www/front
sudo chown alexandra:alexandra assets
cd assets
sudo chown alexandra:alexandra img
sudo service myserver stop
sudo service myserver start
sudo systemctl restart apache2
它成功了
我看不出您实际上创建了存储目录。您可能希望添加显式目录创建,因为您的bean初始化方法类似于:
private final Path rootLocation = Paths.get("upload");
@PostConstruct
public void init() {
try {
Files.createDirectories(rootLocation);
}
catch (IOException e) {
throw new StorageException("Could not initialize storage", e);
}
}
我正在尝试使用多部分上传功能将许多大文件(30GB)上传到S3存储桶。 这是代码。为了避免弄乱这一页,我把它放在一个要点里:https://gist.github.com/twslankard/5296081 上传小于5GB的文件没有问题。根据S3管理控制台中对象的大小,大于5GB的文件似乎被“裁剪”为5GB。 在上传过程中,我没有收到任何异常或错误消息。我在文档中也找不到任何东西表明我做错了什么
我想在远程服务器上上传文件,目前我只能在本地机器上上传。下面是我的代码 提前感谢!
我尝试用java GraphQL上传文件。我研究了这个主题的解决方案:如何用GraphQL-Java上传文件?我使用的是graphql-java版本11.0、graphql-spring-boot-starter版本5.0.2、graphql-java-kickstart版本7.5.0。 我做错了什么?
我想上传一个文件到不同的服务器使用卷曲。我读过许多类似的问题,但我没有得到任何解决我的问题。下面是我现在得到的代码: 当我运行此脚本时,它将保持运行200秒,并以以下方式响应: Sep 17 20:56:58 xxxxx vsftpd[2613]:[user]确定登录:客户端“yyyyy” Sep 17 20:56:58 xxxxx vsftpd[2618]:[用户]FTP响应:客户端“YYYYY
问题内容: 我正在使用使用大量ajax的grails创建一个web应用程序。我想使用ajax实现文件上传。我不知道如何使用ajax进行文件上传。我的示例GSP代码是: 我尝试了和。上传后,我想用结果更新“ updateArea”。结果,我打算显示上传文件的详细信息。 问题答案: 通过Ajax上载文件实际上是不可能的。您仍然可以使用隐藏的iframe在后台上传文件,并评估响应(位于iframe内)或
我需要登录到unix服务器,执行switch user,执行一些命令,然后将这些命令创建的文件scp到另一台服务器。我能够连接到服务器,执行sudo登录和执行命令,但我无法将文件直接scp到另一个远程服务器。 我用的是Jsch jar。下面是我的代码。 public void executeChannel(会话会话、字符串命令、字符串pwd、列表文件)引发异常{ command=sudo su-p