MultipartFile, по умолчанию, уже сохранен на вашем сервере в качестве файла при загрузке пользователя. С этого момента вы можете делать все, что хотите, с этим файлом. Существует метод, который перемещает этот временный файл в любой желаемый пункт назначения. http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartFile.html#transferTo (java.io.File)
Но MultipartFile - это просто API, вы можете реализовать любой другой файл MultipartResolver http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/web/multipart/MultipartResolver.html
Этот API принимает входной поток, и вы можете делать с ним все, что хотите. Реализация по умолчанию (обычно commons-multipart) сохраняет файл temp в качестве файла.
Но другая проблема остается здесь - если S3 API принимает файл как параметр - вы ничего не можете с этим сделать - вам нужно реальный файл. Если вы хотите вообще не создавать файлы - создайте свой собственный S3 API.
Я исправил эту ошибку в исходниках R-forge (пакета "expm"), svn rev. 53. -> Expm R-forge page По какой-то причине на веб-странице все еще отображается версия 52, поэтому следующее может еще не решить вашу проблему (но должно в течение 24 часов):
install.packages("expm", repos="http://R-Forge.R-project.org")
В противном случае получите версию svn напрямую и установите себя:
svn checkout svn://svn.r-forge.r-project.org/svnroot/expm
Спасибо «gd047», который предупредил меня о проблеме по электронной почте.
Обратите внимание, что R-forge также имеет собственные средства отслеживания ошибок.
Мартинт
Это неправильный ответ, но он может быть хорошим местом для обсуждения и понимания внутренней работы R. Этот вид ошибок уже подкрался раньше в другом пакете I использовал.
Во-первых, обратите внимание, что простое присвоение матрицы сначала новой переменной не помогает:
> A <- B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r1 <- A %^% 5
> A
[,1] [,2] [,3]
[1,] 691 1926 312
[2,] 2331 6502 1056
[3,] 1116 3108 505
> B
[,1] [,2] [,3]
[1,] 691 1926 312
[2,] 2331 6502 1056
[3,] 1116 3108 505
Я предполагаю, что R пытается быть умным, передавая по ссылке вместо значений. Чтобы заставить это работать, вам нужно что-то сделать, чтобы отличить A от B:
`%m%` <- function(x, k) {
tmp <- x*1
res <- tmp%^%k
res
}
> B <-matrix(c(1,3,0,2,8,4,1,1,1),nrow=3)
> r2 <- B %m% 5
> B
[,1] [,2] [,3]
[1,] 1 2 1
[2,] 3 8 1
[3,] 0 4 1
Каков явный способ сделать это?
Наконец, в коде C для пакета есть следующий комментарий:
Но я не понимаю, почему R позволяет коду C / Fortran иметь побочные эффекты в глобальной среде.
Хотя исходный код не отображается в пакете, поскольку он упакован в файл .dll
, я считаю, что в пакете используется алгоритм алгоритм быстрого возведения в степень , который вы можете изучить, взяв вместо этого функцию с именем matpowfast
.
Вам нужны две переменные:
result
, чтобы сохранить результат, mat
в качестве промежуточной переменной. Чтобы вычислить A ^ 6
, поскольку 6 = 110
(двоичная запись), в итоге result = A ^ 6
и mat = A ^ 4
. То же самое для A ^ 5
.
Вы можете легко проверить, соответствует ли mat = A ^ 8
, когда вы попытаетесь вычислить A ^ n
для любого 8
Пакетная функция использует начальную переменную A
в качестве промежуточной переменной mat
.
A ^ 5 = (A ^ 4) * A
Я полагаю, что библиотека изменяет исходную переменную A, так что каждый шаг включает в себя умножение результата до тех пор, пока с исходной матрицей A. Результат, который вы получите, кажется прекрасным, просто назначьте его новой переменной.